首页 > 其他分享 >es 复合查询

es 复合查询

时间:2023-11-14 17:04:31浏览次数:42  
标签:语句 复合 查询 filter 文档 match es must

2.10 复合查询

将多个基本查询组合成单一查询的查询

2.10.1 使用bool查询

接收以下参数:

must: 文档 必须匹配这些条件才能被包含进来。

must_not: 文档 必须不匹配这些条件才能被包含进来。

should: 如果满足这些语句中的任意语句,将增加 _score,否则,无任何影响。它们主要用于修正每个文档的相关性得分。

filter: 必须 匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。

相关性得分是如何组合的。每一个子查询都独自地计算文档的相关性得分。一旦他们的得分被计算出来, bool 查询就将这些得分进行合并并且返回一个代表整个布尔操作的得分。

下面的查询用于查找 title 字段匹配 how to make millions 并且不被标识为 spam 的文档。那些被标识为 starred 或在2014之后的文档,将比另外那些文档拥有更高的排名。如果 两者 都满足,那么它排名将更高:

{ "bool": { "must": { "match": { "title": "how to make millions" }}, "must_not": { "match": { "tag": "spam" }}, "should": [ { "match": { "tag": "starred" }}, { "range": { "date": { "gte": "2014-01-01" }}} ] } }

如果没有 must 语句,那么至少需要能够匹配其中的一条 should 语句。但,如果存在至少一条 must 语句,则对 should 语句的匹配没有要求。 如果我们不想因为文档的时间而影响得分,可以用 filter 语句来重写前面的例子:

{ "bool": { "must": { "match": { "title": "how to make millions" }}, "must_not": { "match": { "tag": "spam" }}, "should": [ { "match": { "tag": "starred" }} ], "filter": { "range": { "date": { "gte": "2014-01-01" }} } } }

通过将 range 查询移到 filter 语句中,我们将它转成不评分的查询,将不再影响文档的相关性排名。由于它现在是一个不评分的查询,可以使用各种对 filter 查询有效的优化手段来提升性能。

bool 查询本身也可以被用做不评分的查询。简单地将它放置到 filter 语句中并在内部构建布尔逻辑:

{ "bool": { "must": { "match": { "title": "how to make millions" }}, "must_not": { "match": { "tag": "spam" }}, "should": [ { "match": { "tag": "starred" }} ], "filter": { "bool": { "must": [ { "range": { "date": { "gte": "2014-01-01" }}}, { "range": { "price": { "lte": 29.99 }}} ], "must_not": [ { "term": { "category": "ebooks" }} ] } } } }

2.10.2 constant_score查询

它将一个不变的常量评分应用于所有匹配的文档。它被经常用于你只需要执行一个 filter 而没有其它查询(例如,评分查询)的情况下。

{ "constant_score": { "filter": { "term": { "category": "ebooks" } } } }

term 查询被放置在 constant_score 中,转成不评分的filter。这种方式可以用来取代只有 filter 语句的 bool 查询。

标签:语句,复合,查询,filter,文档,match,es,must
From: https://blog.51cto.com/u_16237074/8371323

相关文章

  • 【Python&图像超分】Real-ESRGAN图像超分模型(超分辨率重建)详细安装和使用教程
    ​1前言        图像超分是一种图像处理技术,旨在提高图像的分辨率,使其具有更高的清晰度和细节。这一技术通常用于图像重建、图像恢复、图像增强等领域,可以帮助我们更好地理解和利用图像信息。图像超分技术可以通过多种方法实现,包括插值算法、深度学习等。其中,深度学习......
  • k8s 删除Terminating状态的namespace
    查看ns状态root@test-10-5-2-15:~#kubectlgetnsNAMESTATUSAGEcert-managerTerminating19h查看该命名空间下的资源kubectlapi-resources-oname--verbs=list--namespaced|xargs-n1kubectlget--show-kind--ignore-not-found-n......
  • MySQL - 一条SQL查询语句是如何执行的
    MySQL的逻辑架构图 详细解答https://www.processon.com/mindmap/655307fe6a2ff722ead8d9e4 ......
  • Object.entries()
    Object.entries()方法返回一个给定对象自己的字符串键值对的数组。constobj={a:"aa",b:"bb",c:"cc"};console.log(Object.entries(obj),"Object.entries(obj)Object.entries(obj)");打印显示是这样[["a",......
  • Codeforces Round 809 (Div. 2) D1. Chopping Carrots (Easy Version) 题解
    题意CodeforcesRound809(Div.2)D1.ChoppingCarrots(EasyVersion)给两个整数\(n,k\),一个数组\(a\),要求构造一个同样长度的数组\(p\),使得\(\max\limits_{1\lei\len}\left(\left\lfloor\frac{a_i}{p_i}\right\rfloor\right)-\min\limits_{1\lei\l......
  • Palindrome-less Arrays
    here哥们不会组合数学。首先类似这题,得出没有回文串的充要条件是没有长度为3的回文串。长度为3的回文串,\(a_i,a_{i+1},a_{i+2}\),只要满足\(a_i\neqa_{i+2}\)即可,也就是说奇数位、偶数位抠出来,新数组中相邻的数不相同。考虑dp,一种显然的dp是设\(f_{i,j}\)为\([1,......
  • Codeforces Round 906 (Div. 2)
    A.简单题B.简单题C.比赛时没做出来,赶着回宿舍,过了几天来补发现很简单秒掉D.Doremy'sConnectingPlan给定n个结点的图,每个点有一个权值a[i],开始时图上没有边,如果与点i相邻的点(包括点i)的权值的和记为Sum_i.给定一个常数c,如果Sum_i+Sum_j>=ijc,则可以在i和j上......
  • kubernetes web管理页面安装(二)
    参考文件: https://cloud.tencent.com/developer/article/1919416参考命令: https://blog.51cto.com/smbands/4903848 查看当前集群nodekubectlgetnode 下载dashboard组件wgethttps://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.......
  • m基于FPGA的2ASK调制解调系统verilog实现,包含testbench测试文件
    1.算法仿真效果 本系统Vivado2019.2平台开发,测试结果如下:   2.算法涉及理论知识概要      2ASK调制解调是一种数字调制解调技术,它是基于ASK调制的一种数字调制方式。ASK调制是一种模拟调制方式,它是通过改变载波的振幅来传输数字信号。而2ASK调制解调则是将数......
  • kubernetes安装(一)
    参考: https://www.cnblogs.com/liuyangQAQ/p/17299871.html部署组件包名称安装包kubeadm集群组件kubelet-1.20.9kubeadm-1.20.9kubectl-1.20.9Docker相关包docker-ce-20.10.7docker-ce-cli-20.10.7containerd.io-1.4.6网络组件https://docs......