Запрос может иметь два типа контекста в упругом поиске. 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
}
Так что используйте контекст запроса для получения соответствующих совпадений и фильтруйте контекст для фильтрации документов. Вы также можете использовать комбинацию обоих.
Подробнее о контексте запроса и фильтра можно прочитать здесь .