Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Query DSL ›Запросы на уровне терминов

Запрос на основе набора терминов

Возвращает документы, содержащие минимальное количество точных терминов в заданном поле.

Запрос terms_set аналогичен запросу terms, за исключением возможности определения необходимого количества совпадающих терминов для возврата документа. Например:

  • Поле programming_languages содержит список известных языков программирования, таких как c++, java или php для кандидатов на работу. Вы можете использовать запрос terms_set для возврата документов, соответствующих по крайней мере двум из этих языков.
  • Поле permissions содержит список возможных разрешений пользователя для приложения. Вы можете использовать запрос terms_set для возврата документов, соответствующих подмножеству этих разрешений.

Пример запроса

Настройка индекса

В большинстве случаев для использования запроса terms_set необходимо включить отображение числового поля в индексе. Это числовое поле содержит количество требуемых совпадающих терминов для возврата документа.

Чтобы увидеть, как настроить индекс для запроса terms_set, попробуйте следующий пример.

  1. Создайте индекс job-candidates с такими отображениями полей:

    • name, поле keyword. Это поле содержит имя кандидата на работу.
    • programming_languages, поле keyword. Это поле содержит языки программирования, известные кандидату на работу.
    • required_matches, числовое поле long. Это поле содержит количество требуемых совпадающих терминов для возврата документа.
    PUT /job-candidates
    {
      "mappings": {
        "properties": {
          "name": {
            "type": "keyword"
          },
          "programming_languages": {
            "type": "keyword"
          },
          "required_matches": {
            "type": "long"
          }
        }
      }
    }
  2. Добавьте документ с ID 1 и следующими значениями:

    • Jane Smith в поле name.
    • ["c++", "java"] в поле programming_languages.
    • 2 в поле required_matches.

    Включите параметр ?refresh, чтобы документ стал сразу доступным для поиска.

    PUT /job-candidates/_doc/1?refresh
    {
      "name": "Jane Smith",
      "programming_languages": [ "c++", "java" ],
      "required_matches": 2
    }
  3. Добавьте другой документ с ID 2 и следующими значениями:

    • Jason Response в поле name.
    • ["java", "php"] в поле programming_languages.
    • 2 в поле required_matches.
    PUT /job-candidates/_doc/2?refresh
    {
      "name": "Jason Response",
      "programming_languages": [ "java", "php" ],
      "required_matches": 2
    }

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

Пример запроса

Следующий поиск возвращает документы, где поле programming_languages содержит по крайней мере два из следующих терминов:

  • c++
  • java
  • php

Значением параметра minimum_should_match_field является required_matches. Это означает, что требуется 2 совпадающих терминов, значение поля required_matches.

GET /job-candidates/_search
{
  "query": {
    "terms_set": {
      "programming_languages": {
        "terms": [ "c++", "java", "php" ],
        "minimum_should_match_field": "required_matches"
      }
    }
  }
}

Параметры верхнего уровня для запроса terms_set

<field>
(Обязательно, объект) Поле, которое необходимо искать.

Параметры запроса <field>

terms

(Обязательно, массив строк) Массив терминов, которые вы хотите найти в указанном поле <field>. Для возврата документа требуется точное совпадение определенного количества терминов, включая пробелы и регистр.

Требуемое количество совпадений определяется параметром minimum_should_match_field или minimum_should_match_script.

minimum_should_match_field
(Необязательно, строка) Числовое поле Numeric, содержащее количество требуемых совпадающих терминов для возврата документа.
minimum_should_match_script

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

См. параметры и допустимые значения в Скриптинге.

Пример запроса с параметром minimum_should_match_script см. в Как использовать параметр minimum_should_match_script.

Примечания

Как использовать параметр minimum_should_match_script

Вы можете использовать minimum_should_match_script для определения требуемого количества совпадающих терминов с помощью скрипта. Это полезно, если нужно динамически устанавливать количество требуемых терминов.

Пример запроса с использованием minimum_should_match_script

Следующий поиск возвращает документы, где поле programming_languages содержит по крайней мере два из следующих терминов:

  • c++
  • java
  • php

Параметр source этого запроса указывает:

  • Требуемое количество совпадающих терминов не может превышать params.num_terms, количество терминов, указанных в поле terms.
  • Требуемое количество совпадающих терминов равно 2, значению поля required_matches.
GET /job-candidates/_search
{
  "query": {
    "terms_set": {
      "programming_languages": {
        "terms": [ "c++", "java", "php" ],
        "minimum_should_match_script": {
          "source": "Math.min(params.num_terms, doc['required_matches'].value)"
        },
        "boost": 1.0
      }
    }
  }
}

© 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-dsl-terms-set-query.html

Spec-Zone.ru

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