设置参数 `node.name` 可以自定义 Elasticsearch 节点的名字。 此条 Tips 由 medcl 贡献。

昵称搜索搜古志辉能搜到数据,搜古志,搜不到用户

Elasticsearch | 作者 依诺 | 发布于2018年09月06日 | 阅读数:3924

背景:
索引user有一个字段是nick_name,analyzer是ik_max_word。
 
1.搜古志辉能搜到数据,搜古志也能搜到古志辉这个用户。古志辉分词为古、志、辉
 
2.当把古志辉三个字加入到自定义词库后,重新导入古志辉这条数据到es里,搜古志辉能搜到数据,搜古志搜不到古志辉这条数据了。古志辉分词为古志辉。
 
是因为什么呢?
 
是因为在导入数据到es的时候,已经建好倒排索引了吗?没把古志辉放入词库的时候,古、志、辉这三个字下面都有古志辉这条数据,把古志辉放入词库后,就只有古志辉这一个词下面有这条数据了,是这个原因吗?
 
已邀请:

rochy - rochy_he

赞同来自: 依诺 qw8613243

是的,加入词典后,分词结果就是:古志辉 了;
你可以建一个隐藏字段,分词器设置为 基本分词器 即可实现之前的效果。

zyb1994111

赞同来自: 依诺

是的

loma

赞同来自: 依诺

当把古志辉三个字加入到自定义词库后,重新导入古志辉这条数据到es里,搜古志辉能搜到数据,搜古志就搜不到古志辉这条数据了。古志辉分词为古志辉
>>
存储过程  古志辉 -> 分词 -> 古志辉 倒排索引到文档 A
查找过程  古志辉 -> 分词 -> 古志辉 根据倒排索引 找到 文档A
查找过程  志辉 -> 分词 -> "志" 和 "辉"   根据倒排索引 找到单词“志”或者“辉”所关联的文档XXX
 

loma

赞同来自:

对这个字段 mapping 设置为 不要分词 然后使用 正则搜索或者模糊搜索 (搜索效率低)
 
 

要回复问题请先登录注册