Запрос Match
Возвращает документы, соответствующие предоставленному тексту, числу, дате или логическому значению. Предоставленный текст анализируется перед сопоставлением.
Запрос match является стандартным запросом для выполнения полнотекстового поиска, включая опции для неточного сопоставления.
Пример запроса
resp = client.search(
query={
"match": {
"message": {
"query": "this is a test"
}
}
},
)
print(resp) response = client.search(
body: {
query: {
match: {
message: {
query: 'this is a test'
}
}
}
}
)
puts response res, err := es.Search(
es.Search.WithBody(strings.NewReader(`{
"query": {
"match": {
"message": {
"query": "this is a test"
}
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err) const response = await client.search({
query: {
match: {
message: {
query: "this is a test",
},
},
},
});
console.log(response); 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 для примера.
-
boost -
(Необязательно, число с плавающей точкой) Число с плавающей точкой, используемое для уменьшения или увеличения баллов релевантности запроса. По умолчанию
1.0.Значения усиления относительны к значению по умолчанию
1.0. Значение усиления между0и1.0уменьшает релевантность. Значение больше, чем1.0, увеличивает релевантность. -
fuzziness - (Необязательно, строка) Максимальное расстояние редактирования, разрешенное для сопоставления. См. Расширение для допустимых значений и дополнительной информации. См. Расширение в запросе match для примера.
-
max_expansions - (Необязательно, целое число) Максимальное количество терминов, до которых будет расширяться запрос. По умолчанию
50. -
prefix_length - (Необязательно, целое число) Максимальное количество начальных символов, которые остаются неизменными для неточного сопоставления. По умолчанию
0. -
fuzzy_transpositions - (Необязательно, логическое значение) Если
true, правки для неточного сопоставления включают перестановки двух смежных символов (ab → ba). По умолчаниюtrue. -
fuzzy_rewrite -
(Необязательно, строка) Метод переписывания запроса. См.
rewriteпараметр для допустимых значений и дополнительной информации.Если параметр
fuzzinessне равен0, запросmatchиспользует методfuzzy_rewriteдляtop_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. Например:
resp = client.search(
query={
"match": {
"message": "this is a test"
}
},
)
print(resp) response = client.search(
body: {
query: {
match: {
message: 'this is a test'
}
}
}
)
puts response res, err := es.Search(
es.Search.WithBody(strings.NewReader(`{
"query": {
"match": {
"message": "this is a test"
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err) const response = await client.search({
query: {
match: {
message: "this is a test",
},
},
});
console.log(response); GET /_search
{
"query": {
"match": {
"message": "this is a test"
}
}
} Как работает запрос соответствия
Запрос match имеет тип boolean. Это означает, что предоставленный текст анализируется, и процесс анализа создаёт булеву конструкцию из предоставленного текста. Параметр operator можно установить в or или and для управления булевыми условиями (по умолчанию or). Минимальное количество необязательных should условий для соответствия можно задать с помощью параметра minimum_should_match.
Вот пример с параметром operator:
resp = client.search(
query={
"match": {
"message": {
"query": "this is a test",
"operator": "and"
}
}
},
)
print(resp) response = client.search(
body: {
query: {
match: {
message: {
query: 'this is a test',
operator: 'and'
}
}
}
}
)
puts response res, err := es.Search(
es.Search.WithBody(strings.NewReader(`{
"query": {
"match": {
"message": {
"query": "this is a test",
"operator": "and"
}
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err) const response = await client.search({
query: {
match: {
message: {
query: "this is a test",
operator: "and",
},
},
},
});
console.log(response); 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.
Неточное соответствие не применяется к терминам со синонимами или в тех случаях, когда процесс анализа создаёт несколько токенов в одном и том же положении. Под капотом эти термины расширяются до специального запроса синонимов, который объединяет частоты терминов, что не поддерживает неточное расширение.
resp = client.search(
query={
"match": {
"message": {
"query": "this is a testt",
"fuzziness": "AUTO"
}
}
},
)
print(resp) response = client.search(
body: {
query: {
match: {
message: {
query: 'this is a testt',
fuzziness: 'AUTO'
}
}
}
}
)
puts response res, err := es.Search(
es.Search.WithBody(strings.NewReader(`{
"query": {
"match": {
"message": {
"query": "this is a testt",
"fuzziness": "AUTO"
}
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err) const response = await client.search({
query: {
match: {
message: {
query: "this is a testt",
fuzziness: "AUTO",
},
},
},
});
console.log(response); GET /_search
{
"query": {
"match": {
"message": {
"query": "this is a testt",
"fuzziness": "AUTO"
}
}
}
} Запрос с нулевыми терминами
Если используемый анализатор удаляет все токены в запросе, как фильтр stop, то по умолчанию не будет соответствовать ни одному документу. Чтобы изменить это, можно использовать опцию zero_terms_query, которая принимает значения none (по умолчанию) и all, что соответствует запросу match_all.
resp = client.search(
query={
"match": {
"message": {
"query": "to be or not to be",
"operator": "and",
"zero_terms_query": "all"
}
}
},
)
print(resp) response = client.search(
body: {
query: {
match: {
message: {
query: 'to be or not to be',
operator: 'and',
zero_terms_query: 'all'
}
}
}
}
)
puts response res, err := es.Search(
es.Search.WithBody(strings.NewReader(`{
"query": {
"match": {
"message": {
"query": "to be or not to be",
"operator": "and",
"zero_terms_query": "all"
}
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err) const response = await client.search({
query: {
match: {
message: {
query: "to be or not to be",
operator: "and",
zero_terms_query: "all",
},
},
},
});
console.log(response); GET /_search
{
"query": {
"match": {
"message": {
"query": "to be or not to be",
"operator": "and",
"zero_terms_query": "all"
}
}
}
} Синонимы
Запрос match поддерживает расширение синонимов с несколькими терминами с помощью фильтра токенов synonym_graph. При использовании этого фильтра, парсер создаёт запрос фразы для каждого синонима с несколькими терминами. Например, следующий синоним: "ny, new york" создаст:
(ny OR ("new york"))
Также можно сопоставлять синонимы с несколькими терминами с помощью конъюнкций:
$params = [
'body' => [
'query' => [
'match' => [
'message' => [
'query' => 'ny city',
'auto_generate_synonyms_phrase_query' => false,
],
],
],
],
];
$response = $client->search($params); resp = client.search(
query={
"match": {
"message": {
"query": "ny city",
"auto_generate_synonyms_phrase_query": False
}
}
},
)
print(resp) response = client.search(
body: {
query: {
match: {
message: {
query: 'ny city',
auto_generate_synonyms_phrase_query: false
}
}
}
}
)
puts response res, err := es.Search(
es.Search.WithBody(strings.NewReader(`{
"query": {
"match": {
"message": {
"query": "ny city",
"auto_generate_synonyms_phrase_query": false
}
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err) const response = await client.search({
query: {
match: {
message: {
query: "ny city",
auto_generate_synonyms_phrase_query: false,
},
},
},
});
console.log(response); 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/8.17/query-dsl-match-query.html