实际上我在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
}
答案 0 :(得分:3)
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"
,因为我们要忽略查询得分并仅使用我们的功能得分