我正在尝试使用 java api 编写我的 json Elasticsearch ,但不知道如何实现。这是我的 json 查询:
{
"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 不支持多个评分函数。 我使用elasticsearch客户端api 6.0.0
最佳答案
我找到了使用类似代码的解决方案
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);
关于java - 如何使用elasticsearch java API编写多个评分函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56063496/