ElasticSearch复合查寻

server/2024/11/13 9:20:46/

        FunctionScore主要是在原始查询的基础上去修改一下算分的。

        而BooleanQuery布尔查询,它不会去修改算分,而是把多个查询语句组合在一起形成新查询。这些被组合的查询语句,我们都称之为叫子查询了,这些子查询,它的组合方式有下面四种,分别是:

                        

        ·Must:必须、必须成立,必须匹配  比如说你有两到三个字查询,每个都要成立

        ·should 选择性匹配。比方说你有两个或三个子查询,只要任意匹配一个就行了

        ·must_not 相反,不能成立

        ·filter,从字面来看,它也是必须匹配,Must也是必须匹配,确实它俩都是必须匹配,都是”与”的意思。

         must not和filter不参与算分

         must not和filter不参与算分它们在做搜索过滤时不参与算分。大家都知道ES在做搜索的时候,它不仅仅是判断你这个文档是否匹配,它还要看你这个文档跟关键字之间的相关度,给你打个分儿,分最高要靠前,这个打分我们有非常复杂的一个算分函数BM25;因此每做一次算分,其实是会消耗一些资源的。如果子查询比较多,每一个都参与算分,是不是查询性能就会受到影响,而如果你在使用的时候,你用的是filter查询和must not查询,它们是不参与算分的。

        虽然BooleanQuery复合查询里面有这么四种组合关系,但是除了跟算分相关的,一般就是关键字:用户输入的个关键字,除了用户输入的个关键字以外,剩下的过滤条件都应该放在must_not 或者filter里边,尽可能的减少算分,提高查询的效率。

        用户输入的关键字,其实你可以放到Must里,因为他要参与算分,

        但是下边这些过滤条件品牌也好,价格也,最好放到 must not或者filter当中。因为放到must_not或者filter里,不存算分,性能更好:

举例子: 

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​ must not和filter不参与算分:

放到must里面:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​         

must参与算分,现在我的must里边就有两个条件了,我们来再运行一次,结果依然是三条。同样还是刚才的这几个,但是让大家看算分是不是变了,变成二点多分了,刚才是不是一点几分

如果说你再把must_not也加进去,算分还是会受影响:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

 所以放到must里面的,或者是should里面的,都会影响算分,都会参与算分。

参与算分的条件越多,性能就会越差,所以这些过滤条件大家一定要根据你自己的需求看是应该放在哪里合适


http://www.ppmy.cn/server/23577.html

相关文章

【STM32F407+CUBEMX+FreeRTOS+lwIP之TCP记录】

STM32F407CUBEMXFreeRTOSlwIP之TCP记录 注意TCP client(socket)示例 TCP_server(socket)效果 注意 如果连接失败,建议关一下代理软件。 配置方面可以参考一下上一篇UDP的文章 STM32F407CUBEMXFreeRTOSlwIP之UDP记录 TCP client(socket) #define LWIP_DEMO_PORT 8…

纯血鸿蒙APP实战开发——全局状态保留能力弹窗

全局状态保留能力弹窗 介绍 全局状态保留能力弹窗一种很常见的能力,能够保持状态,且支持全局控制显隐状态以及自定义布局。使用效果参考评论组件 效果图预览 使用说明 使用案例参考短视频案例 首先程序入口页对全局弹窗初始化,使用Globa…

2024年北京高校数学建模校际联赛竞赛A题

A题:格陵兰入海冰川 随着全球气候的变暖,格陵兰冰盖正在以百年来最快速度融化,是海平面上升的主要原因之一。格陵兰冰盖边缘有很多条冰川的末端延伸到海水中,称为入海冰川。格陵兰冰盖大多数入海冰川的末端延伸到峡湾里&#xff…

LabVIEW学习记录 - 实时显示时间

LabVIEW操作 - 实时显示时间 在程序框图,选择函数->定时->格式化日期/时间字符串 该函数的使用手册说明: 鼠标选择“格式化日期/时间字符串”->创建->输入控件->输入格式 查看时间代码格式: 编程->定时->获取时间日…

FFmpeg常用结构体、关键函数、ffplay.c分析

一、常用结构体: 1、AVFormatContext结构体: AVFormatContext是一个贯穿全局的数据结构,很多函数都要用它作为参数。FFmpeg代码中对这个数据结构的注释是format I/O context,此结构包含了一个视频流的格式内容。其中存有AVIputFor…

超云引领智算未来:2024人工智能基础设施峰会即将召开

随着人工智能技术的飞速发展,我国正积极部署相关战略领域,全力推动人工智能基础设施的创新与应用。在此背景下,以“释放新质生产力,共创智算新纪元”为主题的2024人工智能基础设施峰会将于5月10日在北京隆重举行。本次峰会由超云主…

Leecode15:三数之和

碰到这道题,又再一次的凌乱了……印象里是使用双、三指针,但是真的实现起来的时候又忘记了怎么做。

ansible安装教程

一、启动系统前,加一块光驱,把安装镜像文件放到光驱中 二、配置Yum文件 [rootlocalhost ~]# cd /etc/yum.repos.d/ [rootlocalhost yum.repos.d]# rm -f * [rootlocalhost yum.repos.d]# vi cdrom.repo [BaseOS] nameBaseOS baseurlfile:///media/BaseO…