Запрос маскирования поля span
Обёртка, позволяющая span-запросам участвовать в составных запросах span по одному полю, притворяясь, что ищут в нужном поле.
Это позволяет использовать запросы, такие как span-near или span-or по различным полям, что обычно запрещено.
Запрос маскирования поля span незаменим в сочетании с многополями, когда одно и то же содержимое индексируется с несколькими анализаторами. Например, мы можем индексировать поле с помощью стандартного анализатора, который разбивает текст на слова, и снова с помощью анализатора english, который сводит слова к их корневой форме.
Пример:
resp = client.search(
query={
"span_near": {
"clauses": [
{
"span_term": {
"text": "quick brown"
}
},
{
"span_field_masking": {
"query": {
"span_term": {
"text.stems": "fox"
}
},
"field": "text"
}
}
],
"slop": 5,
"in_order": False
}
},
highlight={
"require_field_match": False,
"fields": {
"*": {}
}
},
)
print(resp) response = client.search(
body: {
query: {
span_near: {
clauses: [
{
span_term: {
text: 'quick brown'
}
},
{
span_field_masking: {
query: {
span_term: {
'text.stems' => 'fox'
}
},
field: 'text'
}
}
],
slop: 5,
in_order: false
}
},
highlight: {
require_field_match: false,
fields: {
"*": {}
}
}
}
)
puts response const response = await client.search({
query: {
span_near: {
clauses: [
{
span_term: {
text: "quick brown",
},
},
{
span_field_masking: {
query: {
span_term: {
"text.stems": "fox",
},
},
field: "text",
},
},
],
slop: 5,
in_order: false,
},
},
highlight: {
require_field_match: false,
fields: {
"*": {},
},
},
});
console.log(response); GET /_search
{
"query": {
"span_near": {
"clauses": [
{
"span_term": {
"text": "quick brown"
}
},
{
"span_field_masking": {
"query": {
"span_term": {
"text.stems": "fox"
}
},
"field": "text"
}
}
],
"slop": 5,
"in_order": false
}
},
"highlight": {
"require_field_match" : false,
"fields": {
"*": {}
}
}
} | Исходное поле, по которому выполняется поиск | |
| Маскируемое поле, которое маскируется исходным полем | |
| Используйте «require_field_match»: false, чтобы выделить маскируемое поле |
Примечание: Запрос span_field_masking может иметь неожиданное поведение при оценке и выделении. Это связано с тем, что запрос возвращает и выделяет маскируемое поле, но оценка и выделение выполняются с использованием статистических данных и смещений исходного поля.
Примечание: Для работы выделения параметр: require_field_match должен быть установлен на значение false в выделении.
© 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-span-field-masking-query.html