ElasticSearch NEST客户端Text和TextPhrase之间的区别

Jef*_*f S 1 elasticsearch nest

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

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

Zac*_*ach 7

在某些时候(我相信早期的0.19或0.20版本),Text各种查询都被重命名为MatchElasticsearch.您可以在Match这里找到文档:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-match-query.html

他们的工作方式很简单.鉴于这句话:"快速棕色狐狸跳",match查询正在寻找:

  • quickbrownfoxjumped

没有涉及排序...... match只是寻找各个令牌的存在.令牌顺序可以是完全随机的,分布在整个段落上,然后文档会返回.

相比之下,match_phrase正在寻找:

  • "quick brown fox jumped"

因为它正在寻找短语,所以令牌的顺序很重要.如果默认斜率为零,则您具有完全短语匹配行为.

如果增加斜率,可以使短语不那么精确.例如,一个人的斜率允许对短语进行单个编辑(编辑计为单词的插入,删除或移动).所以一个人的slop也可能匹配这些短语中的任何一个:

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

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

  • "brown quick fox jumped"

第一次编辑将"棕色"移动到第一个位置,而第二个编辑"快速"移动到第二个位置.因为slop只关心编辑数字而不是定位,所以大的倾向往往会给你相当混乱的结果.高于2-3的污水可能是一个坏主意.

  • 值得注意的是NEST还有`.Match()/.MatchPhrase()/ .MatchPhrasePrefix()/ .MultiMatch()`查询结构.为了向后兼容,保留了`Text*()`. (2认同)