Elasticsearch - 短语匹配(match_phrase)以及slop参数

Posted 席飞剑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch - 短语匹配(match_phrase)以及slop参数相关的知识,希望对你有一定的参考价值。

短语匹配(Phrase Matching)

就像用于全文搜索的的match查询一样,当你希望寻找邻近的单词时,match_phrase查询可以帮你达到目的。

GET /my_index/my_type/_search

    "query": 
        "match_phrase": 
            "title": "quick brown fox"
        
    

和match查询类似,match_phrase查询首先解析查询字符串来产生一个词条列表。然后会搜索所有的词条,但只保留包含了所有搜索词条的文档,并且词条的位置要邻接。一个针对短语quick fox的查询不会匹配我们的任何文档,因为没有文档含有邻接在一起的quick和fox词条。

match_phrase查询也可以写成类型为phrase的match查询:

"match": 
    "title": 
        "query": "quick brown fox",
        "type":  "phrase"
    

词条位置

当一个字符串被分析时,分析器不仅只返回一个词条列表,它同时也返回原始字符串的每个词条的位置、或者顺序信息:

GET /_analyze?analyzer=standard
Quick brown fox

返回如下:


   "tokens": [
      
         "token": "quick",
         "start_offset": 0,
         "end_offset": 5,
         "type": "<ALPHANUM>",
         "position": 1 
      ,
      
         "token": "brown",
         "start_offset": 6,
         "end_offset": 11,
         "type": "<ALPHANUM>",
         "position": 2 
      ,
      
         "token": "fox",
         "start_offset": 12,
         "end_offset": 15,
         "type": "<ALPHANUM>",
         "position": 3 
      
   ]

 

表示原始字符串各个词条的位置.

位置信息可以被保存在倒排索引(Inverted Index)中,像match_phrase这样位置感知(Position-aware)的查询能够使用位置信息来匹配那些含有正确单词出现顺序的文档,且在这些单词之间没有插入别的单词。

短语是什么

对于匹配了短语"quick brown fox"的文档,下面的条件必须为true:

  • quick、brown和fox必须全部出现在某个字段中。
  • brown的位置必须比quick的位置大1。
  • fox的位置必须比quick的位置大2。

如果以上的任何一个条件没有被满足,那么文档就不能被匹配。

在内部,match_phrase查询使用了低级的span查询族(Query Family)来执行位置感知的查询。span查询是词条级别的查询,因此它们没有解析阶段(Analysis Phase);它们直接搜索精确的词条。

幸运的是,大多数用户几乎不

以上是关于Elasticsearch - 短语匹配(match_phrase)以及slop参数的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch - 短语匹配(match_phrase)以及slop参数

Elasticsearch系列---近似匹配

Elasticsearch短语搜索——match_phrase

Elasticsearch上的短语和通配符查询

ElasticSearch查询 第四篇:匹配查询(Match)

[Elasticsearch] 邻近匹配 - 多值字段,邻近程度与相关度