Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›REST API ›API правил запросов

Создание или обновление набора правил запроса

Справочник по новым API

Для получения самых актуальных сведений об API обратитесь к API правил запросов.

Создаёт или обновляет набор правил запроса.

Запрос

PUT _query_rules/<ruleset_id>

Предварительные требования

Требуется право manage_search_query_rules.

(Обязательно, объект) Содержит параметры для набора правил запроса:

Тело запроса

rules
(Обязательно, массив объектов) Конкретные правила, включенные в этот набор правил запроса.

Существует ограничение в 100 правил на набор правил. Это ограничение можно увеличить до 1000 с помощью настройки кластера xpack.applications.rules.max_rules_per_ruleset.

Каждое правило должно содержать следующую информацию:

  • rule_id (Обязательно, строка) Уникальный идентификатор этого правила.
  • type (Обязательно, строка) Тип правила. В настоящее время разрешены только типы правил pinned и exclude.
  • criteria (Обязательно, массив объектов) Критерии, которые должны быть выполнены для применения правила. Если для правила указано несколько критериев, для применения правила должны быть выполнены все критерии.
  • actions (Обязательно, объект) Действия, которые необходимо выполнить при соответствии правилу. Формат этого действия зависит от типа правила.

Критерии должны содержать следующую информацию:

  • type (Обязательно, строка) Тип критерия. Поддерживаются следующие типы критериев:

    • exact Только точные совпадения удовлетворяют критериям, определённым правилом. Применимо для строковых или числовых значений.
    • fuzzy Точные совпадения или совпадения в пределах разрешённого расстояния Левенштейна удовлетворяют критериям, определённым правилом. Применимо только для строковых значений.
    • prefix Совпадения, начинающиеся с этого значения, удовлетворяют критериям, определённым правилом. Применимо только для строковых значений.
    • suffix Совпадения, заканчивающиеся этим значением, удовлетворяют критериям, определённым правилом. Применимо только для строковых значений.
    • contains Совпадения, содержащие это значение где-либо в поле, удовлетворяют критериям, определённым правилом. Применимо только для строковых значений.
    • lt Совпадения со значением, меньшим этого значения, удовлетворяют критериям, определённым правилом. Применимо только для числовых значений.
    • lte Совпадения со значением, меньшим или равным этому значению, удовлетворяют критериям, определённым правилом. Применимо только для числовых значений.
    • gt Совпадения со значением, большим этого значения, удовлетворяют критериям, определённым правилом. Применимо только для числовых значений.
    • gte Совпадения со значением, большим или равным этому значению, удовлетворяют критериям, определённым правилом. Применимо только для числовых значений.
    • always Совпадения со всеми запросами независимо от ввода.
  • metadata (Необязательно, строка) Поле метаданных для сопоставления. Эти метаданные будут использоваться для сопоставления с match_criteria, отправленными в Rule. Требуется для всех типов критериев, кроме always.
  • values (Необязательно, массив строк) Значения для сопоставления с полем метаданных. Для выполнения критерия должно совпасть только одно значение. Требуется для всех типов критериев, кроме always.

Действия зависят от типа правила. Для правил pinned или exclude разрешены следующие действия:

  • ids (Необязательно, массив строк) Уникальные идентификаторы документов документов, к которым применяется правило. Только один из ids или docs может быть указан, и хотя бы один должен быть указан.
  • docs (Необязательно, массив объектов) Документы, к которым применяется правило. Только один из ids или docs может быть указан, и хотя бы один должен быть указан. Максимальное количество документов в правиле равно 100. Вы можете указать следующие атрибуты для каждого документа:

    • _index (Обязательно, строка) Индекс документа для закрепления.
    • _id (Обязательно, строка) Уникальный идентификатор документа.

Из-за ограничений в закреплённых запросах вы можете выбрать документы только с помощью ids или docs, но не можете использовать оба в одном правиле. Рекомендуется использовать одно или другое в наборах правил запроса, чтобы избежать ошибок. Кроме того, закреплённые запросы имеют максимальное ограничение в 100 закреплённых результатов. Если несколько соответствующих правил закрепляют более 100 документов, только первые 100 документов закрепляются в порядке их указания в наборе правил.

Примеры

В следующем примере создается новый набор правил запроса под названием my-ruleset.

С набором my-ruleset связаны два правила:

  • my-rule1 закрепит документы с идентификаторами id1 и id2, когда user_query содержит pugs *или* puggles и user_country точно соответствует us.
  • my-rule2 исключит документы из различных указанных индексов с идентификаторами id3 и id4, когда query_string приблизительно совпадает с rescue dogs.
resp = client.query_rules.put_ruleset(
    ruleset_id="my-ruleset",
    rules=[
        {
            "rule_id": "my-rule1",
            "type": "pinned",
            "criteria": [
                {
                    "type": "contains",
                    "metadata": "user_query",
                    "values": [
                        "pugs",
                        "puggles"
                    ]
                },
                {
                    "type": "exact",
                    "metadata": "user_country",
                    "values": [
                        "us"
                    ]
                }
            ],
            "actions": {
                "ids": [
                    "id1",
                    "id2"
                ]
            }
        },
        {
            "rule_id": "my-rule2",
            "type": "exclude",
            "criteria": [
                {
                    "type": "fuzzy",
                    "metadata": "user_query",
                    "values": [
                        "rescue dogs"
                    ]
                }
            ],
            "actions": {
                "docs": [
                    {
                        "_index": "index1",
                        "_id": "id3"
                    },
                    {
                        "_index": "index2",
                        "_id": "id4"
                    }
                ]
            }
        }
    ],
)
print(resp)
const response = await client.transport.request({
  method: "PUT",
  path: "/_query_rules/my-ruleset",
  body: {
    rules: [
      {
        rule_id: "my-rule1",
        type: "pinned",
        criteria: [
          {
            type: "contains",
            metadata: "user_query",
            values: ["pugs", "puggles"],
          },
          {
            type: "exact",
            metadata: "user_country",
            values: ["us"],
          },
        ],
        actions: {
          ids: ["id1", "id2"],
        },
      },
      {
        rule_id: "my-rule2",
        type: "exclude",
        criteria: [
          {
            type: "fuzzy",
            metadata: "user_query",
            values: ["rescue dogs"],
          },
        ],
        actions: {
          docs: [
            {
              _index: "index1",
              _id: "id3",
            },
            {
              _index: "index2",
              _id: "id4",
            },
          ],
        },
      },
    ],
  },
});
console.log(response);
PUT _query_rules/my-ruleset
{
    "rules": [
        {
            "rule_id": "my-rule1",
            "type": "pinned",
            "criteria": [
                {
                    "type": "contains",
                    "metadata": "user_query",
                    "values": [ "pugs", "puggles" ]
                },
                {
                    "type": "exact",
                    "metadata": "user_country",
                    "values": [ "us" ]
                }
            ],
            "actions": {
                "ids": [
                    "id1",
                    "id2"
                ]
            }
        },
        {
            "rule_id": "my-rule2",
            "type": "exclude",
            "criteria": [
                {
                    "type": "fuzzy",
                    "metadata": "user_query",
                    "values": [ "rescue dogs" ]
                }
            ],
            "actions": {
                "docs": [
                    {
                        "_index": "index1",
                        "_id": "id3"
                    },
                    {
                        "_index": "index2",
                        "_id": "id4"
                    }
                ]
            }
        }
    ]
}

© 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/8.17/put-query-ruleset.html

Spec-Zone.ru

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