1

在查看 NEST 文档中有关文本查询的文档时:http: //nest.azurewebsites.net/query/text.html

我不清楚 Text 和 TextPhrase 方法之间的实际区别是什么。我最好的猜测是两者都考虑了查询中单词的顺序,但是 TextPhrase 允许您使用 SLOP 配置该顺序的重要性。这是正确的和主要的区别吗?

4

1 回答 1

7

Text各种查询Match在某个时候在 Elasticsearch 中被重命名(我相信是早期的 0.19 或 0.20 版本)。您可以在此处找到文档Matchhttp ://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-match-query.html

他们的工作方式很简单。鉴于这个短语:“quick brown fox jumped”,match查询正在寻找:

  • quickbrownfoxjumped

不涉及排序...match只是寻找单个令牌的存在。令牌顺序可以是完全随机的,分布在整个段落中,因此文档会返回。

相比之下,match_phrase正在寻找:

  • "quick brown fox jumped"

因为它正在寻找短语,所以标记的顺序很重要。默认斜率为零,您具有精确的短语匹配行为。

如果你增加斜率,你可以使短语不那么精确。例如,一个 slop 允许对短语进行一次编辑(编辑算作插入、删除或移动单词)。因此,slop of one 也可能与以下任何短语匹配:

  • "quick brown fox really jumped"
  • "the quick brown fox jumped"
  • "quick brown fox jumped high"

重要的是要知道,slops 也不能维持秩序。两个斜率允许两个编辑,所以这个短语也可以匹配:

  • "brown quick fox jumped"

第一次编辑将“棕色”移动到第一个位置,而第二次编辑将“快速”移动到第二个位置。由于 slop 只关心编辑编号,而不关心位置,因此大的 slop 往往会给您带来相当混乱的结果。高于 2-3 的斜率可能是个坏主意。

于 2013-11-24T14:22:39.930 回答