Когда вы используете только один match
внутри предложения bool must
, тогда нет никакой разницы, предложение bool полезно, когда вы хотите объединить несколько (логических) критериев, больше информации о Официальный ES do c. Он поддерживает следующие критерии:
- must
- must_not
- filter
- должен
Позвольте мне показать, взяв небольшой пример из вашего вопроса.
Отображение индекса с использованием только адреса и имени
{
"mappings": {
"properties": {
"address": {
"type": "text"
},
"first_name" :{
"type" : "text"
}
}
}
}
Индекс 3 документа, все с одинаковым адресом mill
, но с разными first_name
{
"address" : "mill",
"first_name" : "Johnson"
}
{
"address" : "mill",
"first_name" : "Parker"
}
{
"address" : "mill",
"first_name" : "opster"
}
Поисковый запрос, чтобы показать все адреса mill
, но не должен содержать first_name как parker
{
"query": {
"bool": {
"must": [
{
"match": {
"address": "mill"
}
},
{
"must_not": {
"first_name": "parker"
}
}
]
}
}
}
Результат только 2 адреса
"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"
}
}
]
На основе комментарии OP, предоставляющие запрос и контекст фильтра , для подробного понимания аспектов производительности.