07-DSL查询语法-FunctionScoreQuery

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如何运算

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值