[英]How to use elastic search java API to write multiple score functions?
我正在尝试用Java API编写json弹性搜索,但不知道如何做。 这是我的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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.