ElasticSearch 使用term搜索中文失败

ElasticSearch 使用term搜索中文失败

今天遇到一个问题,根据用户name进行搜索,使用中文搜索,搜索失败,使用英文搜索,搜索成功

示例一:使用term根据中文查询失败问题
ElasticSearch 使用term搜索中文失败

经分析后,总结如下:

首先,要知道Term和Match的差别
1_Term查询不会对查询的字段进行分词查询,会采用精确匹配。
比如:name=“马云”,则会直接根据 “马云” 去搜索

2_Match会根据查询的字段进行分词,再进行分词查询
比如:name=“马云”,则会分词为 “马” 和 “云” 然后再去查询

具体怎么分词,可以使用es查询,示例:

使用ik_smart分词器查看分词效果,我们发现,马云被分开了
ElasticSearch 使用term搜索中文失败
因此使用term 查询"马云",是查询不到的,查询"马"或"云"就可以查询到
ElasticSearch 使用term搜索中文失败
解决方案:
使用ik分词器 + 扩展需要分词的中文

如何添加ik分词器,步骤如下
下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases
注意: es-ik分词插件版本一定要和es安装的版本对应
第一步:下载es的IK插件,解压后文件命名改为ik
ElasticSearch 使用term搜索中文失败
第二步: 上传到/usr/local/elasticsearch-6.4.3/plugins
第三步: 重启elasticsearch即可

检查Ik分词器是否安装成功
ElasticSearch 使用term搜索中文失败
示例二:使用term查询"苹果" 查询成功,因为苹果不再被分词为"苹"和"果"
ElasticSearch 使用term搜索中文失败