在elasticsearch中的should bool子句中,什么是默认分数模式?

时间:2015-09-27 07:26:23

标签: elasticsearch

实际上我在ES中写了我的应用boo查询子句中的三个查询现在我想知道什么是should子句的默认score_mode,因为我想使用所有三个查询得分的最大值我该如何实现。我的查询现在在下面给出定义score_mode ??

的位置
bool: {
                "disable_coord": true,
                "should": [
                  {
                    term : { 'address.area2' : search_area2 }
                  },
                  {
                    term : { "address.area1" : search_area1 }
                  },
                  {
                    term : { 'address.city' : search_city }
                  }
                ], "boost": 2.0
              }

1 个答案:

答案 0 :(得分:3)

来自Bool Query docs

  

bool查询采用更多匹配更好的方法,因此得分   从每个匹配的must或should子句将被加在一起   为每个文档提供最终的_score。

要覆盖该行为,请将bool打包在

Function Score Query。您可以为address.area2定义Field Value Factor Function,为address.area1定义一个,为address.city定义一个,然后使用max作为score_mode

结果函数得分应该类似于以下(没试过,你可能需要修改一下)

"function_score": {
    "query": YOUR_BOOL_QUERY,
    "boost": 2,
    "functions": [
        {
            "field_value_factor": {
                "field": "address.area2",
                "factor": 1
            }
        },
        {
            "field_value_factor": {
                "field": "address.area1",
                "factor": 1
            }
        },
        {
            "field_value_factor": {
                "field": "address.city",
                "factor": 1
            }
        }
    ],
    "score_mode": "max",
    "boost_mode": "replace"
}

<强>更新

根据docs添加"boost_mode": "replace",因为我们要忽略查询得分并仅使用我们的功能得分