ElasticSearch 使用term搜索中文失败
ElasticSearch 使用term搜索中文失败
今天遇到一个问题,根据用户name进行搜索,使用中文搜索,搜索失败,使用英文搜索,搜索成功
示例一:使用term根据中文查询失败问题
经分析后,总结如下:
首先,要知道Term和Match的差别
1_Term查询不会对查询的字段进行分词查询,会采用精确匹配。
比如:name=“马云”,则会直接根据 “马云” 去搜索
2_Match会根据查询的字段进行分词,再进行分词查询
比如:name=“马云”,则会分词为 “马” 和 “云” 然后再去查询
具体怎么分词,可以使用es查询,示例:
使用ik_smart分词器查看分词效果,我们发现,马云被分开了
因此使用term 查询"马云",是查询不到的,查询"马"或"云"就可以查询到
解决方案:
使用ik分词器 + 扩展需要分词的中文
如何添加ik分词器,步骤如下
下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases
注意: es-ik分词插件版本一定要和es安装的版本对应
第一步:下载es的IK插件,解压后文件命名改为ik
第二步: 上传到/usr/local/elasticsearch-6.4.3/plugins
第三步: 重启elasticsearch即可
检查Ik分词器是否安装成功
示例二:使用term查询"苹果" 查询成功,因为苹果不再被分词为"苹"和"果"