Запрос с использованием простого строкового выражения
Возвращает документы, основанные на предоставленном строковом выражении, используя анализатор с ограниченным, но допускающим ошибки синтаксисом.
Этот запрос использует простой синтаксис для разбора и разделения предоставленного строкового выражения на термины на основе специальных операторов. Затем запрос анализирует каждый термин независимо перед возвращением соответствующих документов.
Хотя его синтаксис ограничен по сравнению с query_string запросом, запрос simple_query_string не возвращает ошибок при некорректном синтаксисе. Вместо этого он игнорирует любые некорректные части строкового выражения.
Пример запроса
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.
-
-
all_fields - [6.0.0] Устарело в 6.0.0. Используйте
fieldsвместо*(Необязательный, булево) Еслиtrue, ищутся все поисковые поля в сопоставлении полей индекса. -
analyze_wildcard - (Необязательный, Булево) Если
true, запрос пытается проанализировать термины с подстановкой символов в строковом выражении. По умолчанию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. Например:
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.
GET /_search
{
"query": {
"simple_query_string": {
"query": "foo | bar + baz*",
"flags": "OR|AND|PREFIX"
}
}
} Допустимые значения
Доступные флаги:
-
ALL(По умолчанию) - Включает все необязательные операторы.
-
AND - Включает оператор
+И. -
ESCAPE - Включает
\как символ экранирования. -
FUZZY - Включает оператор
~Nпосле слова, гдеN— целое число, обозначающее допустимое расстояние редактирования для соответствия. См. Fuzziness. -
NEAR - Включает оператор
~Nпосле фразы, гдеN— максимальное количество позиций, разрешенных между соответствующими токенами. СинонимSLOP. -
NONE - Отключает все операторы.
-
NOT - Включает оператор
-НЕ. -
OR - Включает оператор
\|ИЛИ. -
PHRASE - Включает оператор
"кавычек, используемый для поиска фраз. -
PRECEDENCE - Включает операторы
(и)для управления приоритетом операторов. -
PREFIX - Включает префиксный оператор
*. -
SLOP - Включает оператор
~Nпосле фразы, гдеN— максимальное количество позиций, разрешенных между соответствующими токенами. СинонимNEAR. -
WHITESPACE - Включает пробелы в качестве разделителей.
Подстановочные знаки и повышения по полю в параметре fields
Поля могут быть указаны с подстановочными знаками, например:
GET /_search
{
"query": {
"simple_query_string" : {
"query": "Will Smith",
"fields": [ "title", "*_name" ]
}
}
} | Искать в полях |
Отдельные поля могут быть усилены с помощью символа каретки (^):
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:
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/7.17/query-dsl-simple-query-string-query.html