1

该字符串已编入索引:“Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。”

我的查询是:“你好世界。Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。其他文本。

当我运行查询时,我没有得到任何结果。如果我的查询中有一点“垃圾”文本,我怎样才能得到结果?

我正在使用 Django、Haystack 和 ElasticSearch。

4

2 回答 2

3

如果您使用带有默认运算符“或”的“匹配”查询,那么您将获得匹配任何单词的命中,但匹配大量单词的命中将排在匹配单词的命中之上。

http://www.elasticsearch.org/guide/reference/query-dsl/match-query.html

但是,如果您的意思是您只想匹配那个确切的短语,但允许在任一端添加一些额外的文本,我不确定您是否能做到这一点。

如果您可以放宽对精确短语匹配的要求,一种选择是使用 shingle 令牌过滤器分析文档(和查询)。

http://www.elasticsearch.org/guide/reference/index-modules/analysis/shingle-tokenfilter.html

然后带有“或”运算符的匹配查询将对单词的对、三元组、四元组等进行操作(取决于过滤器配置)。将 shingle 大小设置为 2 或 3 将使包含许多与查询相同的单词的文档(偶然)不太可能获得高分。

或者您可以使用带有 slop 的短语查询(请参阅上面匹配查询页面的底部)。

不过,这两种方法都允许插入以及前缀/后缀。

于 2013-01-17T11:54:27.203 回答
0

Elasticsearch 具有非常强大的More Like This Query,它允许您基于文本片段生成查询。

于 2013-01-16T14:44:35.717 回答