Elasticsearch默认也能对中文进行分词。但是是按照每个字进行分词的,这种在实际应用里肯定达不到想要的效果,因此,我们安装ik分词器来进行中文分词。

1:ES内置的Analyzer分析器

ES自带了许多内置的Analyzer分析器,无需配置就可以直接在index中使用:

  • 标准分词器(standard):以单词边界切分字符串为terms,根据Unicode文本分割算法。它会移除大部分的标点符号,小写分词后的term,支持停用词。
  • 简单分词器(simple):该分词器会在遇到非字母时切分字符串,小写所有的term。
  • 空格分词器(whitespace):遇到空格字符时切分字符串,
  • 停用词分词器(stop):类似简单分词器,同时支持移除停用词。
  • 关键词分词器(keyword):无操作分词器,会输出与输入相同的内容作为一个single term。
  • 模式分词器(pattern):使用正则表达式讲字符串且分为terms。支持小写字母和停用词。
  • 语言分词器(language):支持许多基于特定语言的分词器,比如english或french。
  • 签名分词器(fingerprint):是一个专家分词器,会产生一个签名,可以用于去重检测。
  • 自定义分词器:如果内置分词器无法满足你的需求,可以自定义custom分词器,根据不同的character filters,tokenizer,token filters的组合 。例如IK就是自定义分词器。

    2:安装ik分词器

    1. #首先需要启动elasticsearch容器
    2. #然后进入elasticsearch容器
    3. docker exec -it elasticsearch /bin/bash
    4. #列出所有文件
    5. ls
    6. LICENSE.txt NOTICE.txt README.asciidoc bin config data jdk lib logs modules plugins
    7. #进入plugin目录
    8. cd plugins/
    9. #安装ik分词器,注意和elasticsearch版本对应
    10. elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
    11. #重启下容器
    12. docker restart elasticsearch
    13. #查看当前目录下文件
    14. ls
    15. analysis-ik
    16. cd analysis-ik/
    17. ls
    18. commons-codec-1.9.jar commons-logging-1.2.jar elasticsearch-analysis-ik-7.6.2.jar httpclient-4.5.2.jar httpcore-4.4.4.jar plugin-descriptor.properties plugin-security.policy

    IK支持两种分词模式:

  • ik_max_word: 会将文本做最细粒度的拆分,会穷尽各种可能的组合

  • ik_smart: 会做最粗粒度的拆分

    验证分词插件是否安装成功

    增加一个叫test001的索引
    1. curl -X PUT http://localhost:9200/test001
    成功返回 {“acknowledged”:true,”shards_acknowledged”:true,”index”:”test001”}