欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ElasticSearch ik分词器

程序员文章站 2024-02-21 23:17:22
...

中文分词器

  • es本身对中文分词比较局限,内置的标准分词器只是简单地将中文的每一个汉字作为一个词token分开,可通过以下方法查看效果:

    http://192.168.19.130:9200/_analyze?analyzer=standard&pretty=true&
    text=Elasticsearch分词插件的安装

    //结果:
    Elasticsearch 分 词 插 件 的 安 装

  • 虽然可以保证查全率100%,但是查准率非常低,所以有必要引入其他的分词方法。

  • elastic的中文分词我们采用ik分词,ik分词有两种分词模式,ik_max_word和ik_smart。

    • ik_max_word:将文本做最细粒度的拆分,如,将“*国歌”拆分为*、中华人民、中华、华人、人民*、人民、人、民、*、共和、和、国、国歌,会穷尽所有可能组合,如,南京东路被拆分为南京东路 南京 京东 东路。
    • ik_smart:做最粗粒度的拆分,如,将“*国歌”拆分为*、国歌。
  • 遇到英文时,利用空格和标点将英文单词提取出来,同时转为小写,和真正的英文分词还差一个词干提取功能,比如,i like cats,只能分词出cats,而不能回溯为词干cat。因此我们可以自定义一个分析器:

    {
    “settings”: {
    “analysis”: {
    “analyzer”: {
    “optimizeIK”: {
    “type”: “custom”,
    “tokenizer”: “ik”,
    //增加一个词干提取过滤器,类似的还有snowball
    “filter”: [
    “stemmer”
    ]
    }
    }
    }
    }
    }

  • 遇到拼音时,不会分词,如,woaizhongguo分词还是woaizhongguo。

  • 索引时,为了提高索引的覆盖范围,通常会采用ik_max_word分析器,搜索时,为了提高搜索准确度,会采用ik_smart分析器。

  • 中文分词能解决的问题:

  1. 当搜索关键词如:“人民币”时,如果分词将“人民币”分成“人”,“民”,“币”三个单字,那么搜索该关键词会匹配到很多包含该单字的无关内容,但是如果将该词分词成一个整词“人民币”,搜索单字如“人”字又不会匹配到包含“人民币”关键词的内容,怎么解决这个问题,既保证覆盖度又保证准确度?

  2. 搜索“RMB”时只会匹配到包含“RMB”关键词的内容,实际上,“RMB”和“人民币”是同义词,我们希望用户搜索“RMB”和“人民币”可以相互匹配,ES同义词怎么配置?

  3. 用户搜索拼音: 如"baidu",或者拼音首字母"bd",怎么匹配到"百度"这个关键词,又如用户输入"摆渡"这个词也能匹配到"百度"关键词,中文拼音匹配怎么做到?

  4. 怎么保证搜索关键词被正确分词,通常我们会采用自定义词典来做,那么怎么获取自定义词典?

  1. 安装插件

     ./bin/elasticsearch-plugin install 
         https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.1/
             elasticsearch-analysis-ik-5.5.1.zip
    
  • 版本为5.5.1,适用当前elastic版本。
  1. 重启elastic,就会自动加载这个新安装的插件。