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 elasticsearch+unsubscr...@googlegroups.com.
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.

Reply via email to