I have constructed a pretty default field_value_factor function_score query in the java api (6.5):
return new FunctionScoreQueryBuilder.FilterFunctionBuilder(
fieldValueFactorFunction("fieldname")
.factor(1f)
.missing(10.0)
.modifier(FieldValueFactorFunction.Modifier.LOG)
);
In the logs I checked the actual query that is constructed and I noticed it included a "match_all" filter-query:
"functions":[
{
"filter":{
"match_all":{
"boost":1.0
}
},
"field_value_factor":{
"field":"click_back",
"factor":1.0,
"missing":10.0,
"modifier":"log"
}
}
]
Some questions:
- Is this how a default field_value_factor is constructed anyway in elasticsearch, or is this default implementation part of the java api?
- In terms of the "missing" parameter, what would be the difference between using the "missing" parameter and specifying a "filter" that checks if the field exists?
- (dependent on previous question) If there is an exists-filter present; are the scores of the documents that don't have this field influenced in any way? or can I assume that these docs 'fall through' the filters without the score being modified?