千家信息网

Elasticsearch Query DSL概述与查询以及过滤上下文的用法

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍"Elasticsearch Query DSL概述与查询以及过滤上下文的用法",在日常操作中,相信很多人在Elasticsearch Query DSL概述与查询以及过滤上下文的用法
千家信息网最后更新 2026年11月04日Elasticsearch Query DSL概述与查询以及过滤上下文的用法

这篇文章主要介绍"Elasticsearch Query DSL概述与查询以及过滤上下文的用法",在日常操作中,相信很多人在Elasticsearch Query DSL概述与查询以及过滤上下文的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Elasticsearch Query DSL概述与查询以及过滤上下文的用法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Elasticsearch提供了一个基于JSON的完整查询DSL(领域特定语言)来定义查询。把查询DSL看作是查询的AST(抽象语法树),由两种类型的子句组成:

  • Leaf query clauses(叶查询字句)

叶子查询子句指在特定的字段中寻找特定的值,例如匹配、范围查询或term(完全匹配)。这些查询可以单独使用。

  • Compound query clauses(复合查询字句)

复合查询字句包装其他叶子或复合字句,用于以逻辑方式组合多个查询(如bool、dis_max)或改变他们的行为(如常量查询)。

查询子句的行为取决于它是在查询上下文中使用还是在过滤上下文中使用:

  • 查询上下文

在查询上下文中使用的查询子句,查询字句回答了"这个文档与这个查询子句(查询条件)匹配得有多好?"除了决定文档是否匹配之外,查询子句还计算一个分数,表示相对与其他文档该文档匹配的程度。每当一个查询子句传递给查询参数(query)时,查询上下文就会生效,比如搜索API中的查询参数。

  • 过滤上下文

在过滤上下文中,查询子句回答"这个文档是否匹配这个查询子句?"答案是简单的"是"或"否"--没有计算出分数。过滤上下文主要用于过滤结构化数据(相当与关系型数据库的过滤条件)。例如这个时间戳是否会在2015年到2016年之间?文章的状态是为"发布"吗?等等。

经常使用的过滤器(filter context)会被Elasticsearch自动缓存,以提高性能。每当一个查询子句被传递给过滤器参数(filter)时,过滤器上下文就会生效,例如bool查询中的filter或must_not参数、或filter查询中的常量查询(constant_score)或filter查询。

举例如下:

GET /_search{  "query": {         // @1        "bool": {     // @2              "must": [                           { "match": { "title":   "Search"        }},                              // @3                     { "match": { "content": "Elasticsearch" }}                        // @4              ],              "filter": [     // @5                    { "term":  { "status": "published" }},                                  // @6                                                   { "range": { "publish_date": { "gte": "2015-01-01" }}}       // @7                 ]          } // end bool    }  // end query}

代码@1:query参数定义查询上下文,query参数为elasticsearch的查询上下文。

代码@2:使用elasticsearch的bool查询表达式,会在后续详细介绍。

代码@3:查询上下文,使用关键字match,表示title字段中包含"Search"字符即认为匹配。(可以类比关系型数据库 a.title like '%Search%')

代码@4:查询上下文,使用关键字match,表示content字段中包含"Elasticsearch"字符即认为匹配。

代码@5:定义过滤上下文。

代码@6:使用term(完整匹配),即status字段的值是否是"published"。(相当于关系型数据库的 a.status = 'published')

代码@7:使用range,代表范围匹配,即publish_date字段的值是否大于等于2015-01-01。(相当于a.publish_date >= 2015-01-01')。

本文就介绍到这里了,整个系列将进入到ES DSL查询语法的学习中来。接下来将从如下方面详细介绍ES DSL查询语法:

  • 全文检索(Full text queries)

  • 词条查询(Term level queries)

  • 复合查询

  • Nested(关联查询)

到此,关于"Elasticsearch Query DSL概述与查询以及过滤上下文的用法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

查询 上下 上下文 子句 代码 参数 字句 字段 学习 数据 文档 数据库 语法 过滤器 接下来 关键 关键字 分数 叶子 字符 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡豆 伟宏互联网科技 新华互联网科技 朗新科技与工业互联网 奇酷互联网科技 互联网科技作文 科技与互联网哪个更好 智腾互联网科技有限公司 互联网科技公司有风险吗 互联网科技产业特征 亳州好赞互联网科技有限公司 济南有互联网科技公司吗 山东有哪些互联网科技公司 沐思想互联网科技有限公司 广东工业互联网大赛深圳学泰科技 上海创道互联网络科技有限公司 工业互联网科技成果转化 易企秀互联网科技是做什么的 互联网科技手机排行榜 银川新华互联网科技学校是国营吗 互联网科技有限公司 科技与互联网 贷财互联网科技 奇酷互联网络科技公司 互联网科技公司介绍 互联网科技博主是什么意思 新兴科技互联网创新大赛颁奖典礼 广州新华互联网科技学校电竞方面 沐思想互联网科技有限公司 南通创西澳互联网科技有限公司
0