elasticsearch,search,filter,scoring,Java,elasticsearch,Search,Filter,Scoring" /> elasticsearch,search,filter,scoring,Java,elasticsearch,Search,Filter,Scoring" />

JavaAPI中脚本分数和函数分数过滤器的组合

JavaAPI中脚本分数和函数分数过滤器的组合,java,elasticsearch,search,filter,scoring,Java,elasticsearch,Search,Filter,Scoring,我找不到如何在弹性JavaAPI中组合脚本分数和函数分数过滤器的选项 我有以下疑问: GET index/type/_search { "query": { "nested": { "path": "field", "query": { "function_score": { "query": { "bool": { "must": [ {

我找不到如何在弹性JavaAPI中组合脚本分数和函数分数过滤器的选项

我有以下疑问:

GET index/type/_search
{
  "query": {
    "nested": {
      "path": "field",
      "query": {
        "function_score": {
          "query": {
            "bool": {
              "must": [
                {
                  "match": {
                    "field.name": "NAME"
                  }
                }
              ]
            }
          },
          "functions": [
            {
              "filter": {
                "match": {
                  "field.type":"TYPE"
                }
              },
              "weight": 3
            },
            {
              "script_score": {
                 "script":"doc['field.count'].value"
              }
            }
          ]
        }
      }
    }
  }
}
并尝试编写ElasticSearchQuery

ElasticSearchQuery query = new ElasticSearchQuery(Indexes.NAME, Types.TYPE)
            .setQueryBuilder(QueryBuilders.nestedQuery(FIELD, QueryBuilders.functionScoreQuery(
                    QueryBuilders.boolQuery().must(QueryBuilders.matchQuery(FIELD_NAME, fieldName)),
                    new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{
                            new FunctionScoreQueryBuilder.FilterFunctionBuilder(
                                    QueryBuilders.matchQuery(FIELD_TYPE, fieldType),
                                    ScoreFunctionBuilders.weightFactorFunction(3.0F)
                            )
                    }), ScoreMode.None));

但如何添加脚本分数?

解决方案非常简单:

FunctionScoreQueryBuilder.FilterFunctionBuilder[] filterFunctionBuilders = new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{
                new FunctionScoreQueryBuilder.FilterFunctionBuilder(
                        QueryBuilders.matchQuery(FIELD_TYPE, fieldType),
                        ScoreFunctionBuilders.weightFactorFunction(3)
                ),
                new FunctionScoreQueryBuilder.FilterFunctionBuilder(
                        ScoreFunctionBuilders.scriptFunction(format("doc['%s'].value", FIELD_COUNT))
                )
        };

解决方案非常简单:

FunctionScoreQueryBuilder.FilterFunctionBuilder[] filterFunctionBuilders = new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{
                new FunctionScoreQueryBuilder.FilterFunctionBuilder(
                        QueryBuilders.matchQuery(FIELD_TYPE, fieldType),
                        ScoreFunctionBuilders.weightFactorFunction(3)
                ),
                new FunctionScoreQueryBuilder.FilterFunctionBuilder(
                        ScoreFunctionBuilders.scriptFunction(format("doc['%s'].value", FIELD_COUNT))
                )
        };