Elasticsearch - объединение query_string и bool запроса в фильтре

Можно ли совместить query_string а также bool query в filter query?

Например -

{
  "filter": {
    "query_string": {
      "query": "field:text"
    }
  },
  "bool": {
    "should": {
      "match": {
        "field": "text"
      }
    }
  }
}

1 ответ

Решение

bool предназначен для объединения различных запросов в один запрос bool. Вы можете использовать bool для объединения нескольких запросов таким образом -

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "field:text"
          }
        },
        {
          "match": {
            "field": "text"
          }
        }
      ]
    }
  }
}

Предложение must гарантирует, что все условия будут выполнены. Вы также можете использовать if, чтобы убедиться, что один из запросов совпадает, если используется только must.

Поскольку bool - это просто еще один тип запроса, вы также можете разбивать запросы bool внутри запросов bool следующим образом:

{
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "must": [
              {
                "query_string": {
                  "query": "field:text"
                }
              },
              {
                "match": {
                  "field": "value"
                }
              }
            ]
          }
        },
        {
          "match": {
            "field": "text"
          }
        }
      ]
    }
  }
}
Другие вопросы по тегам