我有两个文档类型,在一个父子关系:麻烦与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 /我耐心地等待 – DrTech