Разница между запросами эластичного поиска - PullRequest
0 голосов
/ 14 января 2019

Я с трудом пытаюсь выяснить, почему эти два запроса не возвращают одинаковое количество результатов (я используюasticsearch 2.4.1):

{
  "nested": {
    "path": "details",
    "filter": [
      { "match": { "details.id": "color" } },
      { "match": { "details.value_str": "red" } }
    ]
  }
}
{
  "nested": {
    "path": "details",
    "filter": {
      "bool": {
        "must": [
          { "match": { "details.id": "color" } },
          { "match": { "details.value_str": "red" } }
        ]
      }
    }
  }
}

Первый запрос имеет больше результатов.

Я предположил, что предложение filter в первом запросе работало как or / should, но если я заменил must во втором запросе на should, запрос даст большее количество результатов, чем у этих двух.

Чем отличается значение этих запросов?

Боюсь, я ничего не знаю о структуре проиндексированных документов; все, что я знаю, это сколько строк возвращает каждый запрос.

1 Ответ

0 голосов
/ 15 января 2019

Первый запрос неверен, вложенный filter не может быть массивом, поэтому я подозреваю, что ES не анализирует его правильно и принимает только одно совпадение вместо обоих, поэтому, вероятно, он возвращает больше данных, чем второй .

Второй запрос верен с точки зрения вложенного фильтра и дает именно то, что вы ожидаете.

...