What is difference between match and bool must match query in Elasticsearch

不羁岁月 提交于 2020-05-14 01:00:26

问题


What is the difference between Only match and bool must match query in ES?

First, Only use the match query

{
   "query":{
      "match":{
         "address":"mill"
      }
   }
}

Second, use compound query

{
  "query": {
    "bool": {
      "must": [
        { "match": { "address": "mill" } }
      ]
     }
   }
}

Can you tell me everything? What is difference between them?


回答1:


When you use only one match inside a bool must clause then there is no difference, the bool clause is useful when you want to combine multiple(boolean) criteria, more info on official ES doc. It supports below criteria.

  1. must
  2. must_not
  3. filter
  4. should

Let me show by taking a small example from your question.

Index mapping with just address and first_name

{
    "mappings": {
        "properties": {
            "address": {
                "type": "text"
            },
            "first_name" :{
                "type" : "text"
            }
        }
    }
}

Index 3 docs, all having same address mill, but different first_name

{
   "address" : "mill",
   "first_name" : "Johnson"
}

{
   "address" : "mill",
   "first_name" : "Parker"
}

{
   "address" : "mill",
   "first_name" : "opster"
}

Search query to show all adresses of mill but must_not contain first_name as parker

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "address": "mill"
                    }
                },
                {
                    "must_not": {
                        "first_name": "parker"
                    }
                }
            ]
        }
    }
}

Result only 2 address

"hits": [
         {
            "_index": "so-60620921-bool",
            "_type": "_doc",
            "_id": "2",
            "_score": 0.13353139,
            "_source": {
               "address": "mill",
               "first_name": "opster"
            }
         },
         {
            "_index": "so-60620921-bool",
            "_type": "_doc",
            "_id": "3",
            "_score": 0.13353139,
            "_source": {
               "address": "mill",
               "first_name": "Johnson"
            }
         }
      ]

Based on the OP comments, providing the query and filter context, to understand the performance aspects in details.




回答2:


As written in your question, they will perform the same action.

The match query is a very straight forward full-text condition statement.

The bool query allows you to add multiple fields and multiple conditions such as exists (to validate a certain field is found in the documents), should (an OR equivalent) and must_not (a NOT equivalent).

Taking again your example, since the bool query only has a single must, match condition, it will only return all the documents with the value mill contained in the address field.

Hope this is helpful! :)



来源:https://stackoverflow.com/questions/60646098/what-is-difference-between-match-and-bool-must-match-query-in-elasticsearch

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!