解决Elasticsearch中文搜索只能搜索单个汉字

问题原因:ES默认分词规则不能支持中文,通过安装IK Analysis for Elasticsearch支持中文分词。

重要提示:不能已经导入数据的index中修改mapping,所以建立index之后立即配置分词器字段,然后再导入数据。

  1. 首先从https://github.com/medcl/elasticsearch-analysis-ik/tree/master下载ES对应版本的IK插件进行安装,安装方法参考链接中的文档。
  2. 使用以下命令重新创建一个Index
    curl -XPUT http://localhost:9200/cdh_es
  3. 设置需要使用IK分词器的字段,其中cdh_es是index,testdata是type,desc是需要进行IK分词的字段。
    curl -XPOST http://localhost:9200/cdh_es/testdata/_mapping -d ‘{“properties”: {“desc”: {“type”: “text”, “analyzer”: “ik_smart”, “search_analyzer”: “ik_smart”}}}’
  4. 其中分词有两种设置方法,ik_max_word和ik_smart,他们的区别如下,可以根据自己项目的情况进行选择:
    ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。
  5. 添加数据后就能进行查询了。

您可能还会对下面的文章感兴趣: