Как составить запрос терминов и запрос bool вместе в Elasticsearch - PullRequest
0 голосов
/ 27 февраля 2019

Первоначально я бы добавил filter в запросе bool.Однако, когда я перехожу на terms filter, документы указывают, что его следует заменить на terms query сейчас.Так что я понимаю, что нам нужно составить сложный запрос с terms query и bool query.Если я прав, как мне написать запрос?

Примечание: я использую Python API эластичного поиска.

1 Ответ

0 голосов
/ 27 февраля 2019

Существует два типа контекста: контекст запроса и контекст фильтра .Любое предложение запроса в контексте запроса влияет на оценку соответствующего документа, т. Е. Насколько документ соответствует запросу, тогда как любое предложение запроса в контексте фильтра определяет, соответствует ли документ и не влияет на оценку.

Поэтому в приведенном ниже запросе я выделил оба контекста:

{
  "query": { 
    "bool": { 
      "must": [
        { "match": { "field1":   "terms1"}},              <------query context
      ],
      "filter": [ 
        { "terms":  { "someId": [3242, 12343, 1234] }},   <-------inside filter block every query clause will act as filter (filter context)
      ]
    }
  }
}

Поэтому, чтобы использовать запрос терминов в качестве фильтра, необходимо выполнить следующие шаги:

  1. Создатьзапрос bool скажет boolQuery
  2. Создайте запрос условий sat termsQuery
  3. Добавьте termsQuery к фильтру boolQuery.
  4. Установите boolQuery в качестве запроса.

Это означает:

{
  "query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "field1": ["terms1", "term2", "terms3"]
          }
        }
      ]
    }
  }
}
...