#elasticsearch
#elasticsearch
Вопрос:
Именованные запросы помогают мне определить, какая часть запроса попала в цель. Для обычных запросов это работает отлично. Однако для запросов rescore именованные запросы не отображаются в ответе.
Вопрос: Это ошибка или намеренная? Есть ли обходной путь?
Обновление: я поднял запрос на функцию
Я приложил некоторый код, чтобы воспроизвести проблему:
Настройка тестового индекса с помощью одного документа
PUT /test
{
"mappings": {
"properties": {
"field1": {
"type": "keyword"
},
"field2": {
"type": "keyword"
}
}
}
}
POST /test/_doc/1
{
"field1": "a",
"field2": "b"
}
«Обычный» и повторный запрос.
GET /test/_search
{
"query": {
"term": {
"field1": {
"value": "a",
"_name": "query_field_1"
}
}
},
"rescore": {
"query": {
"rescore_query": {
"term": {
"field2": {
"value": "b",
"_name": "query_field_2"
}
}
}
},
"window_size": 50
}
}
Ответ: в нем отображается только имя «обычного» запроса matched_queries
.
То, что «query_field_2» также должен был попасть, можно обеспечить, сравнив оценку с запросом rescore и без него.
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.5753642,
"hits" : [
{
"_index" : "test",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.5753642,
"_source" : {
"field1" : "a",
"field2" : "b"
},
"matched_queries" : [
"query_field_1" <<-----HERE I'D EXPECT query_field_2------
]
}
]
}
}
Ответ №1:
Возможно, присвоение имен является неудачным, но запрос rescore просто изменяет оценку и применяется после этапов query
и post_filter
. Так что, поскольку это не актуально query
, этого не может быть _named
.
Тем не менее, это, безусловно, стоит запроса функции.
Комментарии:
1. Это то, чего я боялся. Тем не менее, спасибо за подтверждение.