Создание или обновление набора правил запроса
Создаёт или обновляет набор правил запроса.
Запрос
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