Reputation: 71
I am trying to write my json elastic search with java api but can't figure out how. this is my json query:
{
"query": {
"function_score": {
"query": {
...
},
"functions": [
{
"field_value_factor": {
"field": "boost_score",
"missing": 1,
"factor": 2
}
},
{
"gauss": {
"location": {
"origin": "11, 12",
"scale": "2km"
}
}
}
],
"score_mode": "multiply",
"boost_mode": "multiply"
}
}
}
QueryBuilders.functionScoreQuery doesn't support multiple scoring functions. I an using elasticsearch client api 6.0.0
Upvotes: 1
Views: 1197
Reputation: 71
I find a solution using code like
FilterFunctionBuilder[] functions = new FilterFunctionBuilder[2];
FieldValueFactorFunctionBuilder boostScoreBuilder = ScoreFunctionBuilders
.fieldValueFactorFunction("boost_score")
.missing(1)
.factor(2);
functions[0] = new FunctionScoreQueryBuilder.FilterFunctionBuilder(boostScoreBuilder);
GeoPoint point = new GeoPoint(100.0, 5.0);
GaussDecayFunctionBuilder geoBuilder = ScoreFunctionBuilders.gaussDecayFunction("location", point, GEO_SCALE, GEO_OFFSET, GEO_DECAY);
functions[1] = new FunctionScoreQueryBuilder.FilterFunctionBuilder(geoBuilder);
QueryBuilders
.functionScoreQuery(termQueryBuilder, functions)
.scoreMode(ScoreMode.MULTIPLY)
.boostMode(CombineFunction.MULTIPLY);
Upvotes: 1