我们正在使用Elastic Search,并且作为要求的一部分,我们希望能够将同义词过滤器产生的匹配与非同义词产生的匹配区分开。
例如,如果我们有一个查询,例如:
(汽车和红色)和(非福特)
同义词:颜色红色
然后我们想知道:
[红色汽车]很简单。
但,
[汽车的颜色]是由同义词过滤器引起的点击。
我们的同义词过滤器定义如下:
synonym_filter :
type : synonym
synonyms_path : synonyms.txt
ignore_case : true
expand : true
format : solr
由于同义词过滤器通过在索引时间修改 token 流来完成其工作,因此可能没有直接的方法。也许通过使用突出显示功能,可能会有一种算法。
我想知道是否有人对这种解决方案有经验,或者是否有针对此要求的明智解决方案。先感谢您。
最佳答案
我认为最好的解决方案是分别搜索带有同义词的内容和不包含同义词的内容。
也就是说,如果您在索引时间应用SynonymFilter
,则对内容进行两次索引,一次不使用同义词,一次使用同义词(以及可能使用任何其他过滤器来促进更广泛的搜索)。然后,您可以针对这两个字段运行单独的查询,也可以针对明显增强的直接字段运行匹配项的单个查询。
关于search - 在 Elasticsearch 中区分同义词匹配与常规匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24071580/