Elastic: 常量分数查询constand_score query应用场景

简介: 最近正好有同学问到constand score查询与其他查询的区别,趁此机会,我们来详细了解下constant score查询

0. 引言

最近正好有同学问到constand score查询与其他查询的区别,趁此机会,我们来详细了解下constant score查询

1. 定义

首先我们先来看官方文档中对constand score查询的介绍
在这里插入图片描述
可以看到官方解释是:constant score是用来包装filter查询的,其相关性得分等于boost参数值

这个解释听起来有些生硬,我们来翻译一下:

  • constant score是组合filter来使用的,也就是说constant score中是不能使用query查询的,我们知道filter是不会计算相关性得分的,filter会缓存查询结果来提高查询效率
  • 相关性得分是个常量,等于boost参数值,默认是1

关于这两点我们用一个例子来向大家展示

测试数据:

PUT movies2/_bulk
{"index":{"_id":1}}
{"title": "you and me","tags":["romantic comedy","Action"]}
{"index":{"_id":2}}
{"title": "you and me","tags":["romantic comedy","romantic comedy"]}
{"index":{"_id":3}}
{"title": "you and me","tags":["romantic comedy romantic comedy","Action"]}

执行constant score查询

GET movies2/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "constant_score": {
            "filter": {
              "match_phrase":{
                "tags": "romantic comedy"
              }
            },
            "boost": 2
          }
        }
      ]
    }
  }
}

查询结果:从查询结果可以看出,其相关性得分是个固定值,也就是我们设置的boost。同时因为filter没有考虑相关性得分,tags字段中出现romantic comedy更多的,更加符合查询题意的id=2数据并没有被排在前面
在这里插入图片描述

2. 案例分析

下面我们基于上述的索引数据来通过一个案例,这个题也是ECE考试中的真题,来带大家体会constant score查询。

案例:

  • 查询movies2索引中tittle字段包含my或者me的数据
  • 如果数据中包含romantic comedy则将其相关性得分提高

我们尝试用constant score来解这道题

GET movies2/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "me my"
          }
        }
      ],
      "should": [
        {
          "constant_score": {
            "filter": {
              "match_phrase":{
                "tags": "romantic comedy"
              }
            },
            "boost": 2
          }
        }
      ]
    }
  }
}

执行结果:

  • 会看到排在最前面的是id=1,id=2的数据,他们虽然有小数位的得分,但实际上是must查询的得分+constant score的2分
  • 包含romantic comedy的数据确实被排到最前面,但是这样的结果是我们想要的吗?题目是要求包含romantic comedy的得分提高,同时因为tags字段是个数组,那么我们是不是可以理解为,数组越多元素包含romantic comedy越好。
  • 但实际上,tags中有两个元素包含romantic comedy的id=2数据得分并没有更多

在这里插入图片描述

我们使用普通的match_phrase来解题

GET movies2/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "me my"
          }
        }
      ],
      "should": [
        {
          "match_phrase": {
            "tags": {
              "query": "romantic comedy",
              "boost": 2
            }
          }
        }
      ]
    }
  }
}

执行结果:

  • 可以看到包含romantic comedy更多的id=2,id=3的数据的得分都更高,更加符合我们的题意
  • 所以此题是不适合用constant score来解的

在这里插入图片描述

3. constant score应用场景

基于上述定义,constant score更加适合

  • bool查询中只包含filter查询的场景
  • 不关心词频的查询场景
  • 追求查询速度同时不在乎得分的场景

好了本期的讲解也就到此结束了,如果你觉得对你的学习有帮助的话,不妨点个赞吧

关注公众号:Elasticsearch之家,了解更多新鲜内容

在这里插入图片描述

目录
相关文章
|
分布式计算 安全 Java
从0开始学Java:Java概述
从0开始学Java:Java概述
|
Java Linux 程序员
Linux 下 JNA 调用动态连接库文件 so
Linux 下 JNA 调用动态连接库文件 so
689 0
|
3月前
|
人工智能 运维 API
10分钟零代码,0元立即部署OpenAI开源模型 GPT-OSS
8月,OpenAI推出开源模型gpt-oss-120b和gpt-oss-20b,在多项测试中表现优异,甚至超越GPT-4o等模型。为方便用户部署,阿里云人工智能平台PAI提供一键部署方案,无需编码,可免费体验。用户可通过Model Gallery快速部署模型并使用Cherry Studio客户端进行对话体验。
|
3月前
|
人工智能 自然语言处理 测试技术
有没有可能不微调也能让大模型准确完成指定任务?(少样本学习)
对于我这种正在从0到1构建AI产品的一人公司来说,Few Shots学习的最大价值在于:用最少的资源获得最大的效果。我不需要大量的标注数据,不需要复杂的模型训练,只需要精心设计几个示例,就能让大模型快速理解我的业务场景。
280 43
|
4月前
|
存储 机器学习/深度学习 人工智能
MXFP4量化:如何在80GB GPU上运行1200亿参数的GPT-OSS模型
GPT-OSS通过MXFP4量化技术实现1200亿参数模型在单个80GB GPU上的高效运行,将权重压缩至每参数4.25位,大幅降低内存需求,同时保持高精度和竞争力的基准性能,为大规模模型部署提供了新思路。
401 13
MXFP4量化:如何在80GB GPU上运行1200亿参数的GPT-OSS模型
|
算法 安全 调度
【操作系统】进程同步与进程互斥
【操作系统】进程同步与进程互斥
352 2
|
9月前
|
Windows
Windows硬盘扩容
如果云服务器扩容硬盘或新加盘未生效,可按以下步骤操作: 1. 新加硬盘:右键硬盘选择“联机”。 2. 扩容硬盘:进入“计算机管理”>“磁盘管理”,右键要扩展的分区,点击“扩展卷”。 3. 增加分区:右键未分配空间,选择“新建卷”。 通过这些步骤可确保硬盘变更生效。
329 0
|
存储 Java 关系型数据库
Java分布式事务及seata框架的使用
什么是事务? 事务从本质上讲就是:逻辑上的一组操作,组成这组操作的各个逻辑单元在不同的服务甚至服务器上,保证它们要成功就都成功,要失败就都失败。 事务的四大特性 提到事务就不得不提事务的四大特性(基本特征) ACID: 原子性(atomicity):“原子”的本意是“不可再分”,事务的原子性表现为一个事务中涉及到的多个操作在逻辑上缺一不可。事务的原子性要求事务中的所有操作要么都执行,要么都不执行。 一致性(consistency):“一致”指的是数据的一致,具体是指:所有数据都处于满足业务规则的一致性状态。一致性原则要求:一个事务中不管涉及到多少个操作,都必须保证事务执行之前数据是正确的
|
缓存 监控 Java
Java虚拟机(JVM)性能调优实战指南
在追求软件开发卓越的征途中,Java虚拟机(JVM)性能调优是一个不可或缺的环节。本文将通过具体的数据和案例,深入探讨JVM性能调优的理论基础与实践技巧,旨在为广大Java开发者提供一套系统化的性能优化方案。文章首先剖析了JVM内存管理机制的工作原理,然后通过对比分析不同垃圾收集器的适用场景及性能表现,为读者揭示了选择合适垃圾回收策略的数据支持。接下来,结合线程管理和JIT编译优化等高级话题,文章详细阐述了如何利用现代JVM提供的丰富工具进行问题诊断和性能监控。最后,通过实际案例分析,展示了性能调优过程中可能遇到的挑战及应对策略,确保读者能够将理论运用于实践,有效提升Java应用的性能。 【
536 10

热门文章

最新文章