07-DSL查询语法-FunctionScoreQuery
1.Function Score Query
使用 function score query
,可以修改文档的相关性算分(query score),根据新得到的算分排序。
GET /hotel/_search
{
"query": {
"function_score": {
"query": { "match": {"all": "外滩"} },
"functions": [
{
"filter": {"term": {"id": "1"}},
"weight": 10
}
],
"boost_mode": "multiply"
}
}
}
解释:
"query": { "match": {"all": "外滩"} }
原始查询条件,搜索文档并根据相关性打分(query score)
"filter": {"term": {"id": "1"}},
过滤条件,符合条件的文档才会被重新算分
"weight": 10
算分函数,算分函数的结果称为function score ,将来会与query score运算,得到新算分,常见的算分函数有:
weight
:给一个常量值,作为函数结果(function score)
field_value_factor
:用文档中的某个字段值作为函数结果
random_score
:随机生成一个值,作为函数结果
script_score
:自定义计算公式,公式结果作为函数结果
"boost_mode": "multiply"
加权模式,定义function score
与query score的运算方式,包括:
multiply
:两者相乘。默认就是这个
replace
:用function score 替换 query score
其它:sum、avg、max、min
2.案例:给“如家”这个品牌的酒店排名靠前一些
把这个问题翻译一下,function score需要的三要素:
哪些文档需要算分加权?
品牌为如家的酒店
算分函数是什么?
weight就可以
加权模式是什么?
求和
GET /hotel/_search
{
"query": {
"function_score": {
"query": {// ... },
"functions": [ // 算分函数
{
"filter": { // 满足的条件,品牌必须是如家
"term": {
"brand": "如家"
}
},
"weight": 2 // 算分权重为2
}
],
"boost_mode": "sum"
}
}
}
// function_score查询
GET /hotel/_search
{
"query": {
"function_score": {
"query": {
"match": {
"all": "外滩"
}
},
"functions": [
{
"filter": {
"term": {
"brand": "如家"
}
},
"weight": 10
}
],
"boost_mode": "sum"
}
}
}
3.总结:
function score query定义的三要素是什么?
过滤条件:哪些文档要加分
算分函数:如何计算function score
加权方式:function score 与 query score如何运算