Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Query DSL

Контекст запроса и фильтра

Оценки релевантности

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

Оценка релевантности — положительное число с плавающей точкой, возвращаемое в поле метаданных _score API search. Чем выше _score, тем более релевантен документ. Хотя каждый тип запроса может рассчитывать оценки релевантности по-разному, вычисление оценки также зависит от того, выполняется ли условие запроса в контексте запроса или фильтра.

Контекст запроса

В контексте запроса условие запроса отвечает на вопрос «Насколько хорошо этот документ соответствует этому условию запроса?» Помимо определения того, соответствует ли документ условию, условие запроса также рассчитывает оценку релевантности в поле метаданных _score.

Контекст запроса действует всякий раз, когда условие запроса передаётся в параметр query, такой как параметр query в API search.

Контекст фильтра

В контексте фильтра условие запроса отвечает на вопрос «Соответствует ли этот документ этому условию запроса?» Ответ прост — Да или Нет — оценки не рассчитываются. Контекст фильтра в основном используется для фильтрации структурированных данных, например:

  • Принадлежит ли этот timestamp диапазону с 2015 по 2016 год?
  • Установлено ли поле status в значение "published"?

Часто используемые фильтры автоматически кэшируются Elasticsearch для повышения производительности.

Контекст фильтра действует всякий раз, когда условие запроса передаётся в параметр filter, такой как параметры filter или must_not в запросе bool, параметр filter в запросе constant_score или агрегация filter.

Пример контекстов запроса и фильтра

Ниже приведен пример использования условий запроса в контекстах запроса и фильтра в API search. Этот запрос будет соответствовать документам, удовлетворяющим всем следующим условиям:

  • Поле title содержит слово search.
  • Поле content содержит слово elasticsearch.
  • Поле status содержит точное слово published.
  • Поле publish_date содержит дату с 1 января 2015 года.
GET /_search
{
  "query": { 
    "bool": { 
      "must": [
        { "match": { "title":   "Search"        }},
        { "match": { "content": "Elasticsearch" }}
      ],
      "filter": [ 
        { "term":  { "status": "published" }},
        { "range": { "publish_date": { "gte": "2015-01-01" }}}
      ]
    }
  }
}

Параметр query указывает контекст запроса.

Условия bool и два условия match используются в контексте запроса, что означает, что они используются для оценки соответствия каждого документа.

Параметр filter указывает контекст фильтра. Его условия term и range используются в контексте фильтра. Они отфильтруют документы, которые не соответствуют условиям, но не повлияют на оценку соответствия для соответствующих документов.

Оценки, рассчитанные для запросов в контексте запроса, представлены числами с плавающей точкой одинарной точности; они имеют только 24 бита для точности значащей части. Вычисления оценок, которые превышают точность значащей части, будут преобразованы в числа с плавающей точкой с потерей точности.

Используйте условия запроса в контексте запроса для условий, которые должны повлиять на оценку соответствия документов (т. е. насколько хорошо документ соответствует), и используйте все другие условия запроса в контексте фильтра.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-filter-context.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API