区分同义词命中与弹性搜索中的常规命中

时间:2014-06-05 22:59:56

标签: search lucene elasticsearch

我们正在使用弹性搜索,并且作为要求的一部分,我们希望能够区分同义词过滤器生成的匹配与非同义词的匹配。

例如,如果我们有一个查询,例如:

(汽车和红色)和(非福特)

使用同义词:color< - >红色

然后我们想知道:

[红色汽车]很简单。

但是,

[汽车的颜色]是由同义词过滤器引起的命中。

我们的同义词过滤器定义如下:

        synonym_filter :
            type : synonym
            synonyms_path : synonyms.txt
            ignore_case : true
            expand : true
            format : solr

由于同义词过滤器通过在索引时修改令牌流来完成其工作,因此可能没有直接的方法来执行此操作。也许通过使用突出显示功能可能会有算法。

我想知道是否有人有这种解决方案的经验,或者是否存在针对此要求的聪明解决方案。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为最好的解决方案是将内容与同义词分开搜索,而不是内容。

也就是说,如果您在索引时应用SynonymFilter,则将内容索引两次,一次没有同义词,一次使用同义词(可能还有其他任何过滤器以便进行更广泛的搜索)。然后,您可以针对这两个字段运行单独的查询,或者您可以运行单个查询,并使针对更直接字段的匹配显着提升。