Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Query DSL ›Полные текстовые запросы

Запрос с использованием простого строкового выражения

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

Этот запрос использует простой синтаксис для разбора и разделения предоставленного строкового выражения на термины на основе специальных операторов. Затем запрос анализирует каждый термин независимо перед возвращением соответствующих документов.

Хотя его синтаксис ограничен по сравнению с 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" ] 
    }
  }
}

Искать в полях title, first_name и last_name.

Отдельные поля могут быть усилены с помощью символа каретки (^):

GET /_search
{
  "query": {
    "simple_query_string" : {
      "query" : "this is a test",
      "fields" : [ "subject^3", "message" ] 
    }
  }
}

Поле subject имеет в три раза большую важность, чем поле 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

Spec-Zone.ru

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