Поддерживает ли rescore вложенные запросы?
Я пытаюсь пересмотреть результаты моего запроса, используя вложенный запрос, но я получаю следующее исключение, которое, как я считаю, означает, что rescore не поддерживает вложенные запросы:
nested: ElasticsearchIllegalArgumentException[rescore doesn't support [path]];
Это так?
Вложенные объекты содержат ключевое поле, которое должно быть сопоставлено, и поле веса, которое следует использовать в качестве оценки. Вот запрос:
POST myindex/_search
{
"query" : {
"match" : {
"field1" : {
"query" : "my_query_string",
"type" : "boolean"
}
}
},
"rescore" : {
"window_size" : 50,
"query": {
"nested": {
"path": "path.to.nested.object",
"score_mode" : "avg",
"query": {
"function_score": {
"query":{
"constant_score": {
"query": {
"match": {
"path.to.nested.object.key": "my_query_string"
}
}
}
},
"script_score": {
"script": "doc['path.to.nested.object.weight'].value"
}
}
}
}
}
}
}
1 ответ
Решение
В вашем запросе есть синтаксическая ошибка. При переоценке вам нужно использовать rescore_query, так как query_rescorer - единственная поддерживаемая реализация на данный момент.
Следующее должно работать:
POST myindex/_search
{
"query": {
"match": {
"field1": {
"query": "my_query_string",
"type": "boolean"
}
}
},
"rescore": {
"window_size": 50,
"query": {
"rescore_query": {
"nested": {
"path": "path.to.nested.object",
"score_mode": "avg",
"query": {
"function_score": {
"query": {
"constant_score": {
"query": {
"match": {
"path.to.nested.object.key": "my_query_string"
}
}
}
},
"script_score": {
"script": "doc['path.to.nested.object.weight'].value"
}
}
}
}
}
}
}
}