热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

0.引言最近正好有同学问到constandscore查询与其他查询的区别,趁此机会,我们来详细了解下constantscore查询1.定义首先我们
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之家,了解更多新鲜内容

在这里插入图片描述


推荐阅读
  • 2.ElasticSearch练习索引 : sms-logs-index类型:sms-logs-type   数据导入部分PUTsms_logs_indexsms_logs_typ ... [详细]
  • node.jsurlsearchparamsAPI哎哎哎 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 点击上方“新机器视觉”,选择加”星标”或“置顶”重磅干货,第一时间送达很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间。去年有过一段时间的集中学习,做 ... [详细]
  • Tag类:EVAL_BODY_INCLUDE在doStartTag中返回表示执行标签体的内容SKIP_BODY在doStartTag方法中返回表示不执行标签体EVAL ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 本文整理了Java中org.gwtbootstrap3.client.ui.Icon.addDomHandler()方法的一些代码示例,展示了Icon.ad ... [详细]
author-avatar
你是我的小二郎
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有