У меня есть два типа документа, в отношениях родитель-ребенок:Проблемы с has_parent запрос, содержащий сценарий function_score
"myParent" : {
"properties" : {
"weight" : {
"type" : "double"
}
}
}
"myChild" : {
"_parent" : {
"type" : "myParent"
},
"_routing" : {
"required" : true
}
}
Поле weight
будет использоваться для настраиваемого скоринга/сортировкой. Этот запрос непосредственно против родительских документов работает по назначению:
{
"query" : {
"function_score" : {
"script_score" : {
"script" : "_score * doc['weight'].value"
}
}
}
}
Однако при попытке сделать подобный счет для дочерних документов с has_parent
запросом, я получаю сообщение об ошибке:
{
"query" : {
"has_parent" : {
"query" : {
"function_score" : {
"script_score" : {
"script" : "_score * doc['weight'].value"
}
}
},
"parent_type" : "myParent",
"score_type" : "score"
}
}
}
Ошибкой является :
QueryPhaseExecutionException[[myIndex][3]: query[filtered(ParentQuery[myParent](filtered(function score (ConstantScore(:),function=script[_score * doc['weight'].value], params [null]))->cache(_type:myParent)))->cache(_type:myChild)],from[0],size[10]: Query Failed [failed to execute context rewrite]]; nested: ElasticSearchIllegalArgumentException[No field found for [weight] in mapping with types [myChild]];
Похоже, что вместо применения оценочной функции к родителю, а затем передавая ее результат к ребенку, ES пытается применить скоринг выполняйте функцию непосредственно с дочерним элементом, вызывая ошибку.
Если я не использую score
для score_type
, ошибка не возникает, хотя результаты оцениваются тогда 1.0
, как задокументировано.
Что мне здесь не хватает? Как я могу запросить эти дочерние документы с пользовательским подсчетом на основе родительского поля?
@DrTech Терпение, Яго, терпение;) –
: D/me терпеливо ждет – DrTech