ES match query match_phrase 区别

通过profile 查看es 是如何对 match query 进行查询的

POST movies/_search
{
  "profile": true,
  "query": {
    "match": {
      "title": "one love"

    }
  }
}

结果如下(省略了部分不必要的信息)

"profile" : {
    "shards" : [
      {
        "id" : "[Q491-N8XRdyUYsCZCLJFFQ][movies][0]",
        "searches" : [
          {
            "query" : [
              {
                "type" : "BooleanQuery",
                "description" : "title:one title:love",
                "time_in_nanos" : 1359749
                "children" : [
                  {
                    "type" : "TermQuery",
                    "description" : "title:one",
                    "time_in_nanos" : 288077
                  },
                  {
                    "type" : "TermQuery",
                    "description" : "title:love",
                    "time_in_nanos" : 244287
                  }
                ]
              }
            ],
            "rewrite_time" : 5351,
          }
        ],
        "aggregations" : [ ]
      }
    ]
  }

可以看到包含 3 个查询

  1. 查询 one love
  2. 查询 one
  3. 查询 love

通过profile 查看es 是如何对 match_phrase query 进行查询的

POST movies/_search
{
   "profile": true,
  "query": {
    "match_phrase": {
      "title":{
        "query": "one love",
        "slop": 1

      }
    }
  }
}

默认 slop 是 0
profile 的 search query 描述如下

"type" : "PhraseQuery",
"description" : """title:"one love"~1""",
"time_in_nanos" : 380069,

"one love"~1 意思是 one love 要一起出现,中间可以夹杂另外 一个 单词。

你可能感兴趣的:(ES match query match_phrase 区别)