【发布时间】:2014-02-12 21:04:28
【问题描述】:
我有两种文档类型,处于父子关系:
"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]: 查询失败[执行上下文重写失败]] ;嵌套:ElasticSearchIllegalArgumentException[No field found for [weight] in mapping with types [myChild]];
似乎 ES 不是将评分函数应用于父级,然后将其结果传递给子级,而是试图将评分函数本身应用于子级,从而导致错误。
如果我不将score 用于score_type,则不会发生错误,尽管结果分数都是1.0,如记录所示。
我在这里缺少什么?如何使用基于父字段的自定义评分查询这些子文档?
【问题讨论】:
-
赏金? :) -
@DrTech 耐心,Iago,耐心;)
-
:D /me 耐心等待
标签: elasticsearch