Запрос с использованием строки поиска (simple query string query)
Возвращает документы, основанные на предоставленной строке поиска, используя парсер с ограниченным, но допускающим ошибки синтаксисом.
Этот запрос использует простой синтаксис для разбора и разделения предоставленной строки поиска на термины на основе специальных операторов. Затем запрос обрабатывает каждый термин независимо, прежде чем вернуть соответствующие документы.
Хотя его синтаксис более ограничен, чем синтаксис query_string запроса, запрос simple_query_string не возвращает ошибок для неверного синтаксиса. Вместо этого он игнорирует любые неверные части строки поиска.
Пример запроса
resp = client.search(
query={
"simple_query_string": {
"query": "\"fried eggs\" +(eggplant | potato) -frittata",
"fields": [
"title^5",
"body"
],
"default_operator": "and"
}
},
)
print(resp) response = client.search(
body: {
query: {
simple_query_string: {
query: '"fried eggs" +(eggplant | potato) -frittata',
fields: [
'title^5',
'body'
],
default_operator: 'and'
}
}
}
)
puts response const response = await client.search({
query: {
simple_query_string: {
query: '"fried eggs" +(eggplant | potato) -frittata',
fields: ["title^5", "body"],
default_operator: "and",
},
},
});
console.log(response); GET /_search
{
"query": {
"simple_query_string" : {
"query": "\"fried eggs\" +(eggplant | potato) -frittata",
"fields": ["title^5", "body"],
"default_operator": "and"
}
}
} Параметры верхнего уровня для simple_query_string
-
query - (Обязательно, строка) Строка поиска, которую требуется разобрать и использовать для поиска. См. синтаксис простой строки поиска.
-
fields -
(Необязательно, массив строк) Массив полей, которые необходимо искать.
Это поле принимает выражения с подстановкой. Вы также можете повысить релевантность совпадений для определенных полей, используя обозначение с символом «^» (
^). См. Подстановки и повышение релевантности для полей в параметреfieldsдля примеров.По умолчанию используется значение из настроек индекса
index.query.default_field, которое имеет значение по умолчанию*. Значение*извлекает все поля, подходящие для терм-запросов, и фильтрует метаданные. Затем все извлеченные поля объединяются для создания запроса, если параметрprefixне указан.Существует ограничение на количество полей, которые можно запросить одновременно. Оно определено настройкой поиска
indices.query.bool.max_clause_count, значение по умолчанию которой равно1024. -
default_operator -
(Необязательно, строка) Логика по умолчанию для интерпретации текста в строке запроса, если не указаны операторы. Допустимые значения:
-
OR(По умолчанию) - Например, строка запроса
capital of Hungaryинтерпретируется какcapital OR of OR Hungary. -
AND - Например, строка запроса
capital of Hungaryинтерпретируется какcapital AND of AND Hungary.
-
-
analyze_wildcard - (Необязательно, логическое значение) Если
true, запрос пытается обработать wildcard термины в строке запроса. Значение по умолчаниюfalse. -
analyzer - (Необязательно, строка) Анализатор, используемый для преобразования текста в строке запроса в токены. По умолчанию используется анализатор для индексирования для
default_field. Если анализатор не задан, используется анализатор по умолчанию для индекса. -
auto_generate_synonyms_phrase_query - (Необязательно, логическое значение) Если
true, парсер создаётmatch_phraseзапрос для каждого многопозиционного токена. Значение по умолчаниюtrue. Примеры см. в Многопозиционные токены. -
flags - (Необязательно, строка) Список включенных операторов для синтаксиса простой строки поиска. По умолчанию
ALL(все операторы). Допустимые значения см. в Ограничение операторов. -
fuzzy_max_expansions - (Необязательно, целое число) Максимальное количество терминов, до которых запрос расширяется для приближенного совпадения. По умолчанию
50. -
fuzzy_prefix_length - (Необязательно, целое число) Количество начальных символов, которые остаются неизменными при приближенном совпадении. По умолчанию
0. -
fuzzy_transpositions - (Необязательно, логическое значение) Если
true, правки для приближенного совпадения включают перестановки двух соседних символов (ab → ba). По умолчаниюtrue. -
lenient - (Необязательно, логическое значение) Если
true, ошибки, основанные на формате, такие как предоставление текстового значения для поля типа числового поля, игнорируются. Значение по умолчаниюfalse. -
minimum_should_match - (Необязательно, строка) Минимальное количество клаузов, которые должны соответствовать для того, чтобы документ был возвращен. См.
minimum_should_matchпараметр для допустимых значений и дополнительной информации. -
quote_field_suffix -
(Необязательно, строка) Суффикс, добавляемый к цитируемому тексту в строке запроса.
Вы можете использовать этот суффикс, чтобы использовать другой метод анализа для точных совпадений. См. Смешивание точного поиска со стемингом.
Примечания
Синтаксис простого запроса
Оператор simple_query_string поддерживает следующие операторы:
-
+обозначает операцию И -
|обозначает операцию ИЛИ -
-инвертирует один токен -
"заключает несколько токенов в кавычки, чтобы обозначить фразу для поиска -
*в конце термина обозначает запрос префикса -
(и)обозначают приоритет -
~Nпосле слова обозначает расстояние редактирования (неточность) -
~Nпосле фразы обозначает значение смещения
Чтобы использовать один из этих символов буквально, экранируйте его предшествующей обратной косой чертой (\).
Поведение этих операторов может отличаться в зависимости от значения default_operator. Например:
resp = client.search(
query={
"simple_query_string": {
"fields": [
"content"
],
"query": "foo bar -baz"
}
},
)
print(resp) response = client.search(
body: {
query: {
simple_query_string: {
fields: [
'content'
],
query: 'foo bar -baz'
}
}
}
)
puts response const response = await client.search({
query: {
simple_query_string: {
fields: ["content"],
query: "foo bar -baz",
},
},
});
console.log(response); GET /_search
{
"query": {
"simple_query_string": {
"fields": [ "content" ],
"query": "foo bar -baz"
}
}
} Этот поиск предназначен для возврата только документов, содержащих foo или bar, которые также не содержат baz. Однако из-за default_operator OR, этот поиск на самом деле возвращает документы, содержащие foo или bar, а также любые документы, не содержащие baz. Чтобы получить документы так, как предполагалось, измените строку запроса на foo bar +-baz.
Ограничительные операторы
Вы можете использовать параметр flags для ограничения поддерживаемых операторов синтаксиса простого запроса.
Чтобы явно включить только определенные операторы, используйте разделитель |. Например, значение flags OR|AND|PREFIX отключает все операторы, кроме OR, AND и PREFIX.
resp = client.search(
query={
"simple_query_string": {
"query": "foo | bar + baz*",
"flags": "OR|AND|PREFIX"
}
},
)
print(resp) response = client.search(
body: {
query: {
simple_query_string: {
query: 'foo | bar + baz*',
flags: 'OR|AND|PREFIX'
}
}
}
)
puts response const response = await client.search({
query: {
simple_query_string: {
query: "foo | bar + baz*",
flags: "OR|AND|PREFIX",
},
},
});
console.log(response); GET /_search
{
"query": {
"simple_query_string": {
"query": "foo | bar + baz*",
"flags": "OR|AND|PREFIX"
}
}
} Допустимые значения
Доступные флаги:
-
ALL(По умолчанию) - Включает все необязательные операторы.
-
AND - Включает оператор
+И. -
ESCAPE - Включает
\в качестве символа экранирования. -
FUZZY - Включает оператор
~Nпосле слова, гдеN— целое число, обозначающее разрешенное расстояние редактирования для сопоставления. См. Неточность. -
NEAR - Включает оператор
~Nпосле фразы, гдеN— максимальное количество допустимых позиций между соответствующими токенами. СинонимиченSLOP. -
NONE - Отключает все операторы.
-
NOT - Включает оператор
-НЕ. -
OR - Включает оператор
\|ИЛИ. -
PHRASE - Включает оператор
"кавычек, используемый для поиска фраз. -
PRECEDENCE - Включает операторы
(и)для управления приоритетом операторов. -
PREFIX - Включает оператор
*префикса. -
SLOP - Включает оператор
~Nпосле фразы, гдеN— максимальное количество допустимых позиций между соответствующими токенами. СинонимиченNEAR. -
WHITESPACE - Включает пробелы в качестве символов разбиения.
Подстановочные знаки и повышения по полю в параметре fields
Поля могут быть указаны с подстановочными знаками, например:
resp = client.search(
query={
"simple_query_string": {
"query": "Will Smith",
"fields": [
"title",
"*_name"
]
}
},
)
print(resp) response = client.search(
body: {
query: {
simple_query_string: {
query: 'Will Smith',
fields: [
'title',
'*_name'
]
}
}
}
)
puts response const response = await client.search({
query: {
simple_query_string: {
query: "Will Smith",
fields: ["title", "*_name"],
},
},
});
console.log(response); GET /_search
{
"query": {
"simple_query_string" : {
"query": "Will Smith",
"fields": [ "title", "*_name" ]
}
}
} | Искать в полях |
Отдельные поля могут быть усилены с помощью знака вставки (^):
resp = client.search(
query={
"simple_query_string": {
"query": "this is a test",
"fields": [
"subject^3",
"message"
]
}
},
)
print(resp) response = client.search(
body: {
query: {
simple_query_string: {
query: 'this is a test',
fields: [
'subject^3',
'message'
]
}
}
}
)
puts response const response = await client.search({
query: {
simple_query_string: {
query: "this is a test",
fields: ["subject^3", "message"],
},
},
});
console.log(response); GET /_search
{
"query": {
"simple_query_string" : {
"query" : "this is a test",
"fields" : [ "subject^3", "message" ]
}
}
} | Поле |
Токены в нескольких позициях
По умолчанию, анализатор запросов simple_query_string создает запрос match_phrase для каждого токена в нескольких позициях в строке запроса. Например, парсер создает запрос match_phrase для многословного синонима ny, new york:
(ny OR ("new york"))
Чтобы сопоставлять токены в нескольких позициях с конъюнкцией AND, установите значение auto_generate_synonyms_phrase_query в false:
resp = client.search(
query={
"simple_query_string": {
"query": "ny city",
"auto_generate_synonyms_phrase_query": False
}
},
)
print(resp) response = client.search(
body: {
query: {
simple_query_string: {
query: 'ny city',
auto_generate_synonyms_phrase_query: false
}
}
}
)
puts response const response = await client.search({
query: {
simple_query_string: {
query: "ny city",
auto_generate_synonyms_phrase_query: false,
},
},
});
console.log(response); GET /_search
{
"query": {
"simple_query_string": {
"query": "ny city",
"auto_generate_synonyms_phrase_query": false
}
}
} Для данного примера парсер создает следующий запрос bool:
(ny OR (new AND york)) city)
Этот запрос bool соответствует документам с термином ny или конъюнкцией new AND york.
© 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/query-dsl-simple-query-string-query.html