I have two document types, in a parent-child relationship:
"myParent" : {
"properties" : {
"weight" : {
"type" : "double"
}
}
}
"myChild" : {
"_parent" : {
"type" : "myParent"
},
"_routing" : {
"required" : true
}
}
The weight field is to be used for custom scoring/sorting. This query
directly against the parent documents works as intended:
{
"query" : {
"function_score" : {
"script_score" : {
"script" : "_score * doc['weight'].value"
}
}
}
}
However, when trying to do similar scoring for the child documents with a
has_parent query, I get an error:
{
"query" : {
"has_parent" : {
"query" : {
"function_score" : {
"script_score" : {
"script" : "_score * doc['weight'].value"
}
}
},
"parent_type" : "myParent",
"score_type" : "score"
}
}
}
The error is:
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]];
It seems like instead of taking the result of the scoring function and
applying it to the child, ES is taking the scoring *function* and applying
it to the child, hence the error.
If I don't use score for score_type, the error doesn't occur, although the
results scores are then all 1.0, as documented.
What am I missing here? How can I query these child documents with custom
scoring based on a parent field?
--
You received this message because you are subscribed to the Google Groups
"elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/elasticsearch/714f8a04-a88a-4a47-8baf-998992353f1f%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.