Запрос Match
Возвращает документы, которые соответствуют заданному тексту, числу, дате или булеву значению. Предоставленный текст анализируется перед сопоставлением.
Запрос match является стандартным запросом для выполнения полнотекстового поиска, включая опции для поиска с размытым соответствием.
Пример запроса
GET /_search
{
"query": {
"match": {
"message": {
"query": "this is a test"
}
}
}
} Параметры верхнего уровня для match
-
<field> - (Обязательно, объект) Поле, которое вы хотите искать.
Параметры для <field>
-
query -
(Обязательно) Текст, число, булевое значение или дата, которые вы хотите найти в предоставленном
<field>.Запрос
matchанализирует любой предоставленный текст перед выполнением поиска. Это означает, что запросmatchможет искать в полях типаtextдля проанализированных токенов, а не для точного совпадения. -
analyzer - (Необязательно, строка) Анализатор, используемый для преобразования текста в значении
queryв токены. По умолчанию используется анализатор индекса, сопоставленный для поля<field>. Если анализатор не сопоставлен, используется по умолчанию анализатор индекса. -
auto_generate_synonyms_phrase_query -
(Необязательно, логическое значение) Если
true, запросы match phrase автоматически создаются для многословных синонимов. По умолчаниюtrue.См. Использование синонимов с запросом match для примера.
-
fuzziness - (Необязательно, строка) Максимальное расстояние редактирования, разрешенное для поиска с размытым соответствием. См. Размытость для допустимых значений и дополнительной информации. См. Размытость в запросе match для примера.
-
max_expansions - (Необязательно, целое число) Максимальное количество токенов, на которые запрос будет расширяться. По умолчанию
50. -
prefix_length - (Необязательно, целое число) Максимальное количество начальных символов, оставляемых без изменений для размытого поиска. По умолчанию
0. -
fuzzy_transpositions - (Необязательно, логическое значение) Если
true, правки для размытого поиска включают перестановки двух смежных символов (ab → ba). По умолчаниюtrue. -
fuzzy_rewrite -
(Необязательно, строка) Метод переписывания запроса. См.
rewriteпараметр для допустимых значений и дополнительной информации.Если параметр
fuzzinessне0, запросmatchпо умолчанию использует методfuzzy_rewritetop_terms_blended_freqs_${max_expansions}. -
lenient - (Необязательно, логическое значение) Если
true, ошибки, основанные на формате, такие как предоставление текстовогоqueryзначения для поля типа числовой, игнорируются. По умолчаниюfalse. -
operator -
(Необязательно, строка) Булева логика, используемая для интерпретации текста в значении
query. Допустимые значения:-
OR(По умолчанию) - Например, значение
queryравноcapital of Hungaryинтерпретируется какcapital OR of OR Hungary. -
AND - Например, значение
queryравноcapital of Hungaryинтерпретируется какcapital AND of AND Hungary.
-
-
minimum_should_match -
(Необязательно, строка) Минимальное количество условий, которые должны совпадать для возврата документа. См.
minimum_should_matchпараметр для допустимых значений и дополнительной информации. -
zero_terms_query -
(Необязательно, строка) Указывает, возвращаются ли документы, если
analyzerудаляет все токены, например, при использовании фильтраstop. Допустимые значения:-
none(По умолчанию) - Если
analyzerудаляет все токены, документы не возвращаются. -
all - Возвращает все документы, подобно запросу
match_all.
См. Запрос на нулевые токены для примера.
-
Примечания
Пример краткого запроса
Вы можете упростить синтаксис запроса соответствия, объединив параметры <field> и query. Например:
GET /_search
{
"query": {
"match": {
"message": "this is a test"
}
}
} Как работает запрос соответствия
Запрос match имеет тип boolean. Это означает, что предоставленный текст анализируется, а процесс анализа создаёт булевый запрос на основе этого текста. Параметр operator может быть установлен в значение or или and для управления булевыми условиями (по умолчанию устанавливается значение or). Минимальное количество необязательных условий should для соответствия можно задать с помощью параметра minimum_should_match.
Вот пример с параметром operator:
GET /_search
{
"query": {
"match": {
"message": {
"query": "this is a test",
"operator": "and"
}
}
}
} Параметр analyzer может быть установлен для управления анализатором, который выполнит анализ текста. По умолчанию используется явное определение сопоставления поля или анализатор по умолчанию для поиска.
Параметр lenient может быть установлен в значение true для игнорирования исключений, вызванных несоответствием типов данных, таких как попытка запроса числового поля с текстовой строкой запроса. По умолчанию устанавливается значение false.
Неточность в запросе соответствия
fuzziness позволяет выполнять неточное соответствие на основе типа запрошенного поля. См. Неточность для разрешённых значений.
prefix_length и max_expansions в этом случае можно установить для управления процессом неточности. Если параметр неточности установлен, запрос будет использовать top_terms_blended_freqs_${max_expansions} в качестве метода переписывания. Параметр fuzzy_rewrite позволяет управлять тем, как будет переписан запрос.
По умолчанию разрешены неточные транспозиции (ab → ba), но их можно отключить, установив fuzzy_transpositions в значение false.
Неточное соответствие не применяется к терминам со синонимами или в случаях, когда процесс анализа создаёт несколько токенов в одном и том же положении. Под капотом эти термины расширяются до специального запроса синонимов, который комбинирует частоты терминов, что не поддерживает неточное расширение.
GET /_search
{
"query": {
"match": {
"message": {
"query": "this is a testt",
"fuzziness": "AUTO"
}
}
}
} Запрос с нулевыми терминами
Если используемый анализатор удаляет все токены в запросе, как это делает фильтр stop, то по умолчанию никакие документы не будут соответствовать. Чтобы изменить это, можно использовать опцию zero_terms_query, которая принимает значения none (по умолчанию) и all, что соответствует запросу match_all.
GET /_search
{
"query": {
"match": {
"message": {
"query": "to be or not to be",
"operator": "and",
"zero_terms_query": "all"
}
}
}
} Пороговая частота
Устарело в 7.3.0.
Этот параметр можно опустить, так как запрос Match может эффективно пропускать блоки документов без какой-либо конфигурации, при условии, что общее количество результатов не отслеживается.
Запрос match поддерживает параметр cutoff_frequency, который позволяет указать абсолютную или относительную частоту документов, где термины с высокой частотой перемещаются в необязательный подзапрос и учитываются только в том случае, если один из терминов с низкой частотой (ниже порога) в случае оператора or или все термины с низкой частотой в случае оператора and соответствуют документу.
Этот запрос позволяет динамически обрабатывать stopwords во время выполнения, является независимым от предметной области и не требует файла стоп-слов. Он предотвращает вычисление/итерацию терминов высокой частоты и учитывает их только в том случае, если термин с более высокой значимостью/меньшей частотой соответствует документу. Тем не менее, если все термины запроса находятся выше заданной cutoff_frequency, запрос автоматически преобразуется в чистый конъюнктивный (and) запрос для обеспечения быстрого выполнения.
cutoff_frequency может быть относительным к общему количеству документов, если находится в диапазоне от 0 (включительно) до 1 (исключительно), или абсолютным, если больше или равно 1.0.
Вот пример запроса, состоящего исключительно из стоп-слов:
GET /_search
{
"query": {
"match": {
"message": {
"query": "to be or not to be",
"cutoff_frequency": 0.001
}
}
}
} Параметр cutoff_frequency действует на уровне каждого фрагмента. Это означает, что при тестировании на индексах с небольшим количеством документов следует руководствоваться рекомендациями в Relevance is broken.
Синонимы
Запрос match поддерживает расширение синонимов с несколькими терминами с помощью фильтра токенов synonym_graph. При использовании этого фильтра парсер создаёт фразный запрос для каждого синонима с несколькими терминами. Например, следующий синоним: "ny, new york" даст:
(ny OR ("new york"))
Также возможно соответствие многословным синонимам с конъюнкцией вместо дизъюнкции:
GET /_search
{
"query": {
"match" : {
"message": {
"query" : "ny city",
"auto_generate_synonyms_phrase_query" : false
}
}
}
} Приведённый выше пример создаёт булевый запрос:
(ny OR (new AND york)) city
который соответствует документам с термином ny или конъюнкцией new AND york. По умолчанию параметр auto_generate_synonyms_phrase_query установлен в значение true.
© 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-match-query.html