简体   繁体   English

如何使用弹性搜索Java API编写多个得分函数?

[英]How to use elastic search java API to write multiple score functions?

I am trying to write my json elastic search with java api but can't figure out how. 我正在尝试用Java API编写json弹性搜索,但不知道如何做。 this is my json query: 这是我的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 doesn't support multiple scoring functions. QueryBuilders.functionScoreQuery不支持多个评分功能。 I an using elasticsearch client api 6.0.0 我正在使用Elasticsearch客户端API 6.0.0

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM