【发布时间】:2013-11-24 22:22:39
【问题描述】:
在查看 NEST 文档中有关文本查询的文档时: http://nest.azurewebsites.net/query/text.html
我不清楚 Text 和 TextPhrase 方法之间的实际区别是什么。我最好的猜测是两者都考虑了查询中单词的顺序,但是 TextPhrase 允许您使用 SLOP 配置该顺序的重要性。这是正确的和主要的区别吗?
【问题讨论】:
标签: elasticsearch nest
在查看 NEST 文档中有关文本查询的文档时: http://nest.azurewebsites.net/query/text.html
我不清楚 Text 和 TextPhrase 方法之间的实际区别是什么。我最好的猜测是两者都考虑了查询中单词的顺序,但是 TextPhrase 允许您使用 SLOP 配置该顺序的重要性。这是正确的和主要的区别吗?
【问题讨论】:
标签: elasticsearch nest
Text 的各种查询在某个时候在 Elasticsearch 中被重命名为 Match(我相信是早期的 0.19 或 0.20 版本)。您可以在此处找到Match 的文档:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-match-query.html
它们的工作方式很简单。鉴于这句话:“quick brown fox jumped”,match 查询正在寻找:
quick 或 brown 或 fox 或 jumped
不涉及排序...match 只是在寻找单个令牌的存在。令牌顺序可以是完全随机的,分布在整个段落中,因此文档会返回。
相比之下,match_phrase 正在寻找:
"quick brown fox jumped"因为它正在寻找短语,所以标记的顺序很重要。默认斜率为零,您具有精确的短语匹配行为。
如果你增加斜率,你可以使短语不那么精确。例如,一个斜率允许对短语进行一次编辑(编辑算作插入、删除或移动单词)。因此,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 的斜率可能是个坏主意。
【讨论】:
.Match()/.MatchPhrase()/.MatchPhrasePrefix()/.MultiMatch() 查询结构。保留Text*() 是为了向后兼容。