简体   繁体   中英

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. 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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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