即使是不成熟的尝试,也胜于胎死腹中的策略。

es6.4.0版本,关键词最小粒度分词后包含同义词,导致查询不准确

Elasticsearch | 作者 seigo_chan | 发布于2019年12月11日 | 阅读数:1831

es6.4.0版本,搜索的关键词最小粒度分词后,词组包含同义词,导致查询结果不对,
比如我定义了一组同义词:钢筋,螺纹钢。现在用“钢筋混凝土管”作为关键词查询,“钢筋混凝土管”最小粒度分词后的词语包含“钢筋”。
由于“钢筋”的同义词有“螺纹钢”,查询结果出现了本不应该出来的“钢螺纹”。这种问题怎么处理,是需要把“钢筋混凝土管” 写到自定义词库中吗
已邀请:

Ombres

赞同来自: seigo_chan

可以考虑索引时分词器和搜索时分词器分离,索引时分词添加同义词,搜索时分词不添加同义词。然后设置mathc query的operator为AND,也就是多个分词term之间的关系是同时出现(如果这样的结果还是不太满意,可以考虑使用math_phrase,通过slop来限制词距,但是性能会稍差一些)
匿名用户

匿名用户

赞同来自:

搜索钢筋怎么可能搜索出螺纹钢?
除非你是一个字一个字分词的,索然你搜索的是钢筋,但是 实际情况钢筋被分开搜索,只要包含钢的都出来了。
 
匿名用户

匿名用户

赞同来自:

现在用的是multiMatchQuery查询,设置的cross_field,operator为AND。
索引时分词添加同义词,搜索时分词不添加同义词,这个方法可行。感谢
 
 
你说你都添加同义词了,这不就是问题的根源吗?
为什么索引的时候,分词器加同义词,搜索的时候却不加呢?
这不是多此一举吗?用到同义词,才加,用不着就不加。
 

要回复问题请先登录注册