【问题标题】:How to covert this elastic search functional score query to java API如何将此 elasticsearch 函数分数查询转换为 java API
【发布时间】:2017-08-30 06:22:28
【问题描述】:

如何将下面的 ES 查询转换为 Java API?我正在使用弹性搜索 2.3.3

 GET /schema_name/_search
 {
"from": 0,
"size": 200,
"query": {
    "function_score": {
        "query": {
            "match_all": {}
        },
        "boost": "5",
        "functions": [{
                "filter": {
                    "term": {
                        "alert_code": "event_rule_1"
                    }
                },
                "weight": 50
            },
            {
                "filter": {
                    "term": {
                        "alert_code": "event_rule_2"
                    }
                },
                "weight": 30
            },
            {
                "filter": {
                    "term": {
                        "alert_code": "event_rule_3"
                    }
                },
                "weight": 10
            },
            {
                "filter": {
                    "term": {
                        "alert_code": "event_rule_4"
                    }
                },
                "weight": 10
            },
            {
                "filter": {
                    "term": {
                        "alert_code": "event_rule_5"
                    }
                },
                "weight": 50
            },
            {
                "filter": {
                    "term": {
                        "alert_code": "event_rule_6"
                    }
                },
                "weight": 50
            }
        ],
        "max_boost": 50,
        "score_mode": "max",
        "boost_mode": "replace",
        "min_score": 0
      }
    }
 }

我已经尝试使用下面的链接使用 Java API 编写此 ES 查询 Elasticsearch FunctionScore query using Java API

但下面的链接似乎是针对旧 ES 版本的,我无法在弹性搜索 2.3.3 中找到这些静态函数。

【问题讨论】:

    标签: elasticsearch java elasticsearch-java-api


    【解决方案1】:

    使用java API实现如下

    FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders
                        .functionScoreQuery(queryBuilder)
                        .setMinScore(0f)
                        .maxBoost(50f)
                        .scoreMode("max")
                        .boostMode(CombineFunction.REPLACE);
    
                for (String alertCode : ruleCodesLowerCase) {
                    if(alertPriorityMap.get(alertCode.toUpperCase()) != null){
                        functionScoreQueryBuilder.add(QueryBuilders.termQuery(AlertESEnum.ALERT_CODE_FIELD.value(), 
                                alertCode), ScoreFunctionBuilders.weightFactorFunction((AlertPriority.intValue(alertPriorityMap.get(alertCode.toUpperCase()).getPriority()))));
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 2021-09-13
      • 1970-01-01
      • 2012-07-26
      • 2020-06-07
      • 2016-01-01
      • 1970-01-01
      相关资源
      最近更新 更多