我的映射看起来像:
"foo" : {
"name" : {
"type" : "string",
},
"points": {
"type" : "double"
}
}
我们目前正在做的是使用过滤查询来搜索名称。 除此之外,我们现在想要根据包含的内容来改变每个结果的分数。
因此,如果点数为3.0,我们希望_score + 3等等。
查询可能类似于:
{
"from": 0,
"size": 50,
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
//filters
}
}
}
}
答案 0 :(得分:1)
您可以使用function_score
query来实现此目的。它很简单,就像这样:
{
"query": {
"function_score": {
"filter": { <--- your filters go in here
//your filters
},
"boost_mode": "sum", <--- the script score will be summed with the query score
"script_score": "doc.points.value" <--- script score returns the value of the points field
}
}
}
由于您只有一个功能,因此也可以使用默认的boost_mode
(即multiply
)并让脚本分数直接返回总和分数:
{
"query": {
"function_score": {
"filter": { <--- your filters go in here
//your filters
},
"script_score": "_score + doc.points.value" <--- script score returns the value of the points field
}
}
}