18.Elasticsearch 7.15 Query DSL 之 bool查询

devtools/2025/1/22 16:32:29/

bool查询简介

布尔查询允许使用布尔逻辑(AND, OR, NOT)将多个查询子句组合成复杂查询,是Elasticsearch查询DSL的一部分。bool 查询映射到 Lucene BooleanQuery。它使用一个或多个布尔子句构建,这些布尔子句包括:

布尔子句类型描述
must子句(查询)必须出现在匹配的文档中,并对得分做出贡献。在 must 下定义的每个查询都是逻辑 “AND”,只返回与所有指定查询匹配的文档。
must_not排除匹配这些子句的文档。子句在filter上下文中执行,不影响评分。由于评分会被忽略,因此所有文档都会返回 0 分。在 must_not 下定义的每个查询都是逻辑 “NOT”,只返回不匹配任何指定查询的文档。
should子句(查询)应出现在匹配文档中。在 should 下定义的每个查询都起到逻辑 "OR "的作用,返回与任何指定查询匹配的文档。
filter子句(查询)必须出现在匹配文档中。但与must不同的是,查询的得分将被忽略。filter子句是在filter上下文中执行的,这意味着评分会被忽略,而结果可以被缓存以提高性能。filter下定义的每个查询都是逻辑 “AND”,只返回与所有指定查询匹配的文档。

must 和 should 子句具有逻辑 AND、OR 运算符的功能,有助于对结果进行评分。不过,这些结果不会被缓存以加快检索速度。相比之下,filter 和 must_not 子句用于包含或排除结果,不会影响得分,除非在 constant_score 查询中使用(会缓存结果)。

bool 查询采用 "多多益善 "的方法,因此每个匹配的 must 或 should 子句的得分都会相加,从而得出每个文档的最终 _score 分数。

例子

POST _search
{"query": {"bool" : {"must" : {"term" : { "user.id" : "kimchy" }},"filter": {"term" : { "tags" : "production" }},"must_not" : {"range" : {"age" : { "gte" : 10, "lte" : 20 }}},"should" : [{ "term" : { "tags" : "env1" } },{ "term" : { "tags" : "deployed" } }],"minimum_should_match" : 1,"boost" : 1.0}}
}

minimum_should_match参数

您可以使用 minimum_should_match 参数指定返回文档中必须匹配的 should 子句的数量或百分比。
如果 bool 查询至少包含一个 should 子句,而没有 mustfilter 子句,则默认值为 1,否则默认值为 0。

类型示例值描述
正整数3表示一个固定值,与should子句的数量无关。
负整数-2表示should子句总数减去该数字后为必选子句。
百分比75%表示should子句总数的百分比。根据百分比计算出的数字四舍五入后用作最小值。
负百分比-25%表示可选条款总数的这一百分比可能缺失。从总数中减去该百分比计算出的数字后,再向下取整,以确定最小值。
组合3<90%一个正整数,后面跟一个小于符号,再后面跟任何一个前面提到的指定符,就是一个条件指定。它表示如果可选条款的数量等于(或小于)该整数,则所有条款都是必需的,但如果大于该整数,则适用该规范。在本例中:如果有 1 到 3 个条款,则所有条款都是必填的,但如果有 4 个或更多条款,则只有 90% 的条款是必填的。
多组合2<-25% 9<-3可以用空格分隔多个条件说明,每个条件说明只对大于前一个条件说明的数字有效。在此示例中:如果有 1 或 2 个条款,则两个条款都需要;如果有 3-9 个条款,则除 25% 外所有条款都需要;如果有超过 9 个条款,则除 3 个条款外所有条款都需要。

http://www.ppmy.cn/devtools/152640.html

相关文章

开关电源基础

文章目录 线性电源与开关电源选用 开关稳压器脉宽调制简化的降压开关电源 开关电源类型输出电压分拓扑分 控制器与稳压器效率与 V o u t V_{out} Vout​ 同步与非同步隔离与非隔离非隔离式拓扑结构隔离式拓扑结构 线性电源与开关电源 线性稳压器就是我们通常说的LDO: 传输元件…

Kotlin语言的数据类型

Kotlin的基本数据类型 Kotlin 是一种现代化的编程语言&#xff0c;旨在提高代码的安全性和可维护性。与 Java 等传统语言相比&#xff0c;Kotlin 引入了许多新特性和改进&#xff0c;其中最基本的就是数据类型。本文将深入探讨 Kotlin 中的数据类型&#xff0c;包括它们的定义…

条件决策树(Conditional Decision Trees)算法详解

条件决策树(Conditional Decision Trees)算法详解 1. 引言 条件决策树是决策树的一个重要变体,它在标准决策树的基础上引入了条件约束,使得决策过程更加灵活和精确。本文将详细介绍条件决策树的原理、实现和应用。 2. 条件决策树原理 2.1 基本概念 条件决策树在传统决策…

Java 资源管理教程:掌握 close 方法、Cleaner 类与 Runtime.addShutdownHook

在 Java 编程中&#xff0c;高效地管理资源是至关重要的&#xff0c;特别是当你处理文件、数据库连接、网络连接等有限资源时。为了确保这些资源得到正确释放&#xff0c;Java 提供了多种机制。本教程将深入探讨 close 方法、Cleaner类以及 Runtime.addShutdownHook 方法&#…

StyleGAN - 基于样式的生成对抗网络

1. 背景与问题 随着生成对抗网络&#xff08;GAN&#xff09;的兴起&#xff0c;深度学习领域在图像生成方面取得了显著进展。传统的生成对抗网络&#xff08;如DCGAN&#xff09;为生成图像提供了强大的能力&#xff0c;但仍面临一些挑战&#xff0c;比如生成图像的质量、细节…

14. Vue 3 中使用 ECharts 实现仪表盘

引言 仪表盘是一种常见的数据可视化组件&#xff0c;广泛应用于实时数据监控、设备状态显示等场景。在前端开发中&#xff0c;ECharts 是一款强大的图表库&#xff0c;能够轻松地帮助我们实现复杂的图表效果。本文将介绍如何在 Vue 3 项目中&#xff0c;利用 ECharts 来实现一…

搭建一个基于Spring Boot的书籍学习平台

搭建一个基于Spring Boot的书籍学习平台可以涵盖多个功能模块&#xff0c;例如用户管理、书籍管理、学习进度跟踪、笔记管理、评论和评分等。以下是一个简化的步骤指南&#xff0c;帮助你快速搭建一个基础的书籍学习平台。 — 1. 项目初始化 使用 Spring Initializr 生成一个…

【Python项目】主观题自动阅卷系统

【Python项目】主观题自动阅卷系统 技术简介&#xff1a;采用Python技术、B/S框架、MYSQL数据库等实现。 系统简介&#xff1a;本系统以自动阅卷主观题为主&#xff0c;其功能首先有五大模块&#xff0c;包括系统首页、在线考试功能、试卷管理、成绩管理、用户管理。 背景&…