Elasticsearch Query DSL概述与查询、过滤上下文

简介: Elasticsearch Query DSL概述与查询、过滤上下文

从本节开始,先详细介绍Elasticsearch Query DSL语法,该部分是SearchAPI的核心基础之一。


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(关联查询)
相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
数据采集 JSON 数据挖掘
Elasticsearch 的DSL查询,聚合查询与多维度数据统计
Elasticsearch的DSL查询与聚合查询提供了强大的数据检索和统计分析能力。通过合理构建DSL查询,用户可以高效地搜索数据,并使用聚合查询对数据进行多维度统计分析。在实际应用中,灵活运用这些工具不仅能提高查询效率,还能为数据分析提供深入洞察。理解并掌握这些技术,将显著提升在大数据场景中的分析和处理能力。
914 20
|
存储 JSON 监控
大数据-167 ELK Elasticsearch 详细介绍 特点 分片 查询
大数据-167 ELK Elasticsearch 详细介绍 特点 分片 查询
1032 4
|
JSON 自然语言处理 算法
ElasticSearch基础2——DSL查询文档,黑马旅游项目查询功能
DSL查询文档、RestClient查询文档、全文检索查询、精准查询、复合查询、地理坐标查询、分页、排序、高亮、黑马旅游案例
ElasticSearch基础2——DSL查询文档,黑马旅游项目查询功能
|
自然语言处理 搜索推荐 Java
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(一)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图
495 0
|
存储 自然语言处理 搜索推荐
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
446 0
|
安全 Java Linux
Linux安装Elasticsearch详细教程
Linux安装Elasticsearch详细教程
2425 64
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
6677 0
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
733 5
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
1579 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。