Elasticsearch 中文分词器 IK 插件介绍

在 Elasticsearch 中,IK 是一种常用的中文分词插件,它支持中文分词、英文分词、拼音分词等,广泛应用于需要处理中文文本的场景中。IK 插件的中文分词基于词典和规则,通过分析文本内容,将中文句子分割成词条,从而使得 Elasticsearch 在检索时可以更好地理解中文文本。

1. IK 插件简介

IK 插件是 Elasticsearch 中非常流行的一个中文分词器,它支持两种分词模式:

  • 细粒度模式(ik_max_word):该模式将句子尽可能分解为更多的词。它会尝试拆解出更多的词条,以提高匹配的准确性,适用于对精确度要求较高的场景。
  • 精确模式(ik_smart):该模式会尽量将句子分为少数几个较为常用的词条,适用于对性能要求较高的场景,因为它处理速度更快,分词粒度更粗。

IK 插件还支持拼音分词、同义词扩展等功能,可以大大提高中文搜索的效率和准确度。

2. IK 插件安装

IK 插件是一个第三方插件,需要手动安装。以下是安装步骤:

步骤 1: 下载 IK 插件

可以从 GitHub 上下载 IK 插件的源码:IK 分词器 GitHub

或者直接下载最新版的 elasticsearch-analysis-ik 插件压缩包。

步骤 2: 安装 IK 插件

假设你已经安装了 Elasticsearch,并且使用的是 7.x 或 8.x 版本,可以通过以下命令安装 IK 插件:

# 在 Elasticsearch 安装目录下执行此命令
bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.10.0/ik-analysis-7.10.0.zip

这里的 URL 是 IK 插件的压缩包地址,确保选择与你的 Elasticsearch 版本兼容的插件版本。

安装完成后,重启 Elasticsearch 服务:

# 重启 Elasticsearch 服务
systemctl restart elasticsearch

步骤 3: 验证插件安装

安装完成后,可以通过查询插件列表来验证 IK 插件是否安装成功:

curl -X GET "localhost:9200/_cat/plugins?v"

如果 IK 插件安装成功,你会看到类似以下输出:

name        component           version
--------------------------------------------
your-node   analysis-ik         7.10.0

3. 配置 IK 分词器

IK 插件安装成功后,你需要在创建索引时指定使用 IK 分词器。可以通过修改映射(Mapping)来指定字段使用 IK 分词器。

步骤 1: 创建带 IK 分词器的索引

使用以下命令创建一个新索引,并指定中文字段使用 IK 分词器:

PUT /my_index
{
  "settings": {
    "analysis": {
      "tokenizer": {
        "ik_smart": {
          "type": "ik_smart"
        },
        "ik_max_word": {
          "type": "ik_max_word"
        }
      },
      "analyzer": {
        "ik_smart_analyzer": {
          "type": "custom",
          "tokenizer": "ik_smart"
        },
        "ik_max_word_analyzer": {
          "type": "custom",
          "tokenizer": "ik_max_word"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "ik_max_word_analyzer"
      }
    }
  }
}

这里:

  • ik_max_word_analyzer 使用了 IK 插件的细粒度模式。
  • content 字段将使用该分词器进行分析。

步骤 2: 向索引中添加文档

现在你可以向这个索引中添加文档了:

POST /my_index/_doc/1
{
  "content": "我爱编程"
}

步骤 3: 搜索测试

可以进行简单的搜索,测试分词效果:

GET /my_index/_search
{
  "query": {
    "match": {
      "content": "编程"
    }
  }
}

IK 分词器会根据 “ik_max_word” 或 “ik_smart” 模式,将文档内容 “我爱编程” 分词成多个小词,并进行搜索匹配。

4. IK 分词器模式

IK 插件支持两种主要的分词模式:

1. ik_max_word(细粒度模式)

这种模式会将输入的文本尽可能地分割成更多的词。例如:

我爱编程

在 ik_max_word 模式下,分词结果可能是:

["我", "爱", "编程", "我爱", "爱编程"]

它会尽可能拆分出更多的词。

2. ik_smart(精确模式)

这种模式会将输入文本分成较少的词,通常是最常见的词。例如:

我爱编程

在 ik_smart 模式下,分词结果可能是:

["我爱", "编程"]

它倾向于分出更少但较为常见的词条。

5. 配置文件

IK 插件的配置文件位于 Elasticsearch 的配置目录下。你可以根据需要修改配置来改变分词器的行为。

配置文件路径

在 Elasticsearch 安装目录下找到 config 文件夹,里面有 IK 插件的配置文件:

  • config/ik/config.ini:该文件包含了 IK 分词器的相关配置,如自定义词典、停用词等。
  • config/ik/dict:该目录包含了分词所使用的词典文件。你可以在这里添加自定义的词汇。

修改自定义词典

如果你有特定的领域词汇,可以将它们添加到 dict 文件夹中的 user.dict 文件中。例如:

编程语言
数据分析

然后,IK 分词器会根据新的字典对文本进行分词。

6. 拼音分词支持

IK 插件支持拼音分词,你可以在索引设置中启用拼音分词器,并结合其他分词器来对拼音进行分词。例如:

PUT /my_index
{
  "settings": {
    "analysis": {
      "tokenizer": {
        "ik_pinyin": {
          "type": "ik_pinyin"
        }
      },
      "analyzer": {
        "ik_pinyin_analyzer": {
          "type": "custom",
          "tokenizer": "ik_pinyin"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "ik_pinyin_analyzer"
      }
    }
  }
}

通过启用拼音分词器,可以实现拼音输入法的搜索功能。

7. 总结

IK 插件是 Elasticsearch 中最常用的中文分词插件之一,它提供了非常好的中文分词功能,并且支持定制化配置。使用 IK 插件可以提高中文文本的搜索和索引效率,特别是在处理中文内容时。

  • ik_max_word:细粒度模式,将文本尽可能多地拆分成词。
  • ik_smart:精确模式,适合对性能要求较高的场景。
  • 拼音分词:支持拼音和同义词扩展,可以进一步增强中文搜索功能。

通过结合 IK 插件的配置,你可以根据实际需求定制中文分词器,提高搜索和数据处理的效率。