search - 在 Elasticsearch 中区分同义词匹配与常规匹配

标签 search lucene elasticsearch

我们正在使用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/

相关文章:

elasticsearch - Lucene:按文档 ID 过滤查询

php - Elasticsearch 模糊匹配,精确匹配最先显示

api - 将文件提交给Elasticsearch的最有效方法

C# 检查值的最佳方法是多次存在于列表中

c - 搜索 lzw 编码的文件

java - Apache 卢森 : How to save an index into a file?

search - Solr 中的通配符搜索

ruby-on-rails - 仅当资源具有特定属性时如何过滤搜索集合?

java - Solr:当用多个词查询字段时,默认的 OR 运算符返回不相关的结果

elasticsearch - 如何在ElasticSearch Aggregation中包含所有文档并避免sum_other_doc_count> 0