Elasticsearch的分词

ES在创建倒排索引时需要对文档分词;在搜索时,需要对用户输入内容分词。但默认的分词规则对中文处理并不友好。处理中文分词,一般会使用IK分词器。

ik分词器安装

  1. 点击下载
  2. 进入elasticsearch-7.15.0\plugins目录,新建ik文件夹,把下载文件解压进去
  3. 重启ES

重启时遇到ik和ES版本不一致的错误:

Plugin [analysis-ik] was built for Elasticsearch version 7.14.2 but version 7.15.0 is running

修改ik分词器的默认ES版本
打开elasticsearch-7.15.0\plugins\ik\plugin-descriptor.properties文件

修改成es对应的版本
elasticsearch.version=7.15.0

ik分词器包含两种模式

  • ik_smart:最少切分,粗粒度
  • ik_max_word:最细切分,细粒度
POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "我是中国人"
}

使用ik_samrt分词,中国人划分为一个分词

{
  "tokens" : [
    {
      "token" : "我",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
      "token" : "是",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
      "token" : "中国人",
      "start_offset" : 2,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 2
    }
  ]
}

ik分词拓展

要拓展ik分词器的词库,只需要修改一个ik分词器目录中的config目录中的IkAnalyzer.cfg.xml文件:

IK Analyzer 扩展配置

ext.dic

stopword.dic

elasticsearch-7.15.0\plugins\ik\config目录

  1. 新增ext.dic加入分词内容
    例如:豪弘集团
  2. 新增stopword.dic加入过滤分词
    例如:视察
  3. 重启ES
    请求
POST _analyze
{
  "analyzer": "ik_smart",
  "text": "视察豪弘集团"
}

加入分词后的响应

{
  "tokens" : [
    {
      "token" : "豪弘集团",
      "start_offset" : 5,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 3
    }
  ]
}

当我们添加了扩展分词,豪弘集团,变成了一个分词;视察没了

你可能感兴趣的:(Elasticsearch的分词)