Elasticsearch: при простой фильтрации зачем использовать фильтрованный тип запроса - PullRequest
0 голосов
/ 25 апреля 2019

Какая разница между

{
  "query": {
    "filtered": {
    "filter": { "term": { "folder": "inbox" } }
    }
  }
}

и

{
  "query": {
    "term": { "folder": "inbox" }
  }
}

Кажется, они оба фильтруют индекс в поле folder по значению inbox.

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Запрос может иметь два типа контекста в упругом поиске. Query контекст и filter контекст. Контекст запроса показывает, насколько документ соответствует запросу, т. Е. Он рассчитывает оценку, тогда как контекст фильтра указывает, соответствует ли документ запросу, и оценка не выполняется.

Запрос в контексте запроса указывает, какой документ лучше соответствует запросу. Чем выше балл, тем более актуален документ.

Запрос в контексте фильтра ведет себя как условный оператор, т. Е. true , если документ соответствует запросу, и false , если он не соответствует.

Чтобы ответить на ваш вопрос, оба запроса будут соответствовать одному и тому же количеству документов, но первый запрос не будет вычислять оценку (он будет быстрее по сравнению со вторым, потому что вычисление оценки пропущено), тогда как второй будет рассчитывать оценку и будет медленнее по сравнению с первым. Поэтому, если вы просто хотите отфильтровать, лучше сказать эластику, что оценка не должна рассчитываться, поместив запрос в контекст фильтра. Таким образом вы сохраните вычислительную стоимость расчета баллов. Расчет баллов будет непроизводительным, если требуется только фильтрация и, следовательно, существует два типа контекстов.

Пример вывода для 1-го запроса (контекст фильтра):

{
  "_index": "test",
  "_type": "_doc",
  "_id": "3",
  "_score": 0,                 <-------- no scoring done
}

Пример вывода для 2-го запроса (контекст запроса):

{
  "_index": "test",
  "_type": "_doc",
  "_id": "2",
  "_score": 0.9808292          <-------- score calculated
}

Так что используйте контекст запроса для получения соответствующих совпадений и фильтруйте контекст для фильтрации документов. Вы также можете использовать комбинацию обоих.

Подробнее о контексте запроса и фильтра можно прочитать здесь .

0 голосов
/ 25 апреля 2019

Я согласен с тем, что сказано наверху, но есть одна вещь, которую нужно добавить. Запрос и Фильтр могут использоваться вместе в запросе для сокращения времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...