ES查询语法介绍及举例

1. ES查询语法

Elasticsearch(ES)的查询语法非常强大且灵活,允许执行从简单到复杂的各种搜索操作。ES查询主要基于两种类型:Leaf Query Clauses(叶查询子句)和Compound Query Clauses(复合查询子句)。以下是ES查询语法的全面介绍:

1. Leaf Query Clauses

叶查询子句直接对数据进行查询。常用的叶查询子句包括:

  • Match Query:对文本进行全文搜索,支持文本分析。

    { "match": { "field": "text" } }
    
  • Term Query:对文本进行精确搜索,不分析文本。

    { "term": { "field": "value" } }
    
  • Range Query:基于范围的查询,用于数字、日期等类型。

    { "range": { "field": { "gte": 10, "lte": 20 } } }
    
  • Exists Query:检查文档中是否存在某个字段。

    { "exists": { "field": "name" } }
    
  • Wildcard Query:使用通配符的模糊查询。

    { "wildcard": { "field": "val*" } }
    
  • Regexp Query:使用正则表达式的查询。

    { "regexp": { "field": "regex" } }
    

2. Compound Query Clauses

复合查询子句允许将多个查询组合成一个逻辑查询。常用的复合查询子句包括:

  • Bool Query:将多个查询组合使用布尔逻辑。

    {"bool": {"must": [{...}],"should": [{...}],"must_not": [{...}],"filter": [{...}]}
    }
    
  • Dis Max Query:对子查询的最佳匹配进行打分和排序。

    { "dis_max": { "queries": [{...}] } }
    
  • Constant Score Query:将查询的分数设置为常数。

    { "constant_score": { "filter": {...} } }
    
  • Function Score Query:根据特定函数修改查询的分数。

    {"function_score": {"query": {...},"functions": [{...}]}
    }
    

3. Full Text Queries

全文查询专用于处理文本数据,提供全面的文本搜索能力。

  • Match Query:对全文字段进行搜索。
  • Multi Match Query:在多个字段上执行相同的Match查询。
  • Match Phrase Query:搜索完全匹配指定短语的文档。

4. Joining Queries

连接查询用于处理嵌套和父子关系的数据。

  • Nested Query:在嵌套对象上执行查询。
  • Has Child/Has Parent Query:查询子文档或父文档。

5. Geo Queries

地理查询用于处理包含地理位置数据的文档。

  • Geo Distance Query:查询距离某个点一定范围内的文档。
  • Geo Bounding Box Query:查询位于指定矩形区域内的文档。

6. Specialized Queries

专门的查询用于特定场景。

  • More Like This Query:查找与给定文档类似的文档。
  • Script Query:使用脚本进行自定义查询。

7. Aggregation

虽然不是查询语句,但聚合是ES中的一个重要特性,用于对数据进行分组和统计。

Elasticsearch的查询语法覆盖了从简单的全文搜索到复杂的数据分析的各种需求。了解和掌握这些查询语法可以帮助开发者有效地利用Elasticsearch处理和分析

2. ES查询业务举例

创建复杂的Elasticsearch查询语句需要深入了解你的数据结构和业务需求。下面我将提供一些示例查询,并解释它们的功能。这些查询覆盖了不同的场景和Elasticsearch的高级特性。

1. 多条件匹配查询

查询user_data索引中名字为John并且年龄在3040岁之间的用户:

GET /user_data/_search
{"query": {"bool": {"must": [{ "match": { "name": "John" }},{ "range": { "age": { "gte": 30, "lte": 40 }}}]}}
}

2. 全文搜索与高亮显示

blog_posts索引中搜索包含Elasticsearch tutorial的博客文章,并高亮显示匹配的文本:

GET /blog_posts/_search
{"query": {"match": { "content": "Elasticsearch tutorial" }},"highlight": {"fields": {"content": {}}}
}

3. 聚合查询

统计orders索引中每个用户的订单数量:

GET /orders/_search
{"size": 0,"aggs": {"user_orders": {"terms": { "field": "user_id" },"aggs": {"order_count": { "value_count": { "field": "order_id" }}}}}
}

4. 模糊搜索

products索引中对产品名称进行模糊搜索,查找类似iphon的产品:

GET /products/_search
{"query": {"fuzzy": {"name": {"value": "iphon","fuzziness": "AUTO"}}}
}

5. 地理位置搜索

restaurants索引中搜索距离某个坐标5km范围内的餐厅:

GET /restaurants/_search
{"query": {"bool": {"filter": {"geo_distance": {"distance": "5km","location": {"lat": 40.715,"lon": -73.988}}}}}
}

6. 嵌套查询

查询employee_data索引中,有技能名称为Java且水平为expert的员工:

GET /employee_data/_search
{"query": {"nested": {"path": "skills","query": {"bool": {"must": [{ "match": { "skills.name": "Java" }},{ "match": { "skills.level": "expert" }}]}}}}
}

7. 多索引搜索

同时在blogsnews索引中搜索包含Elasticsearch的文章:

GET /blogs,news/_search
{"query": {"match": { "content": "Elasticsearch" }}
}

8. 时间范围查询

查询events索引中在2020-01-012020-12-31之间发生的事件:

GET /events/_search
{"query": {"range": {"date": {"gte": "2020-01-01","lte": "2020-12-31"}}}
}

9. 正则表达式查询

users索引中搜索电子邮件地址符合特定正则表达式的用户:

GET /users/_search
{"query": {"regexp": {"email": ".*@example\\.com"}}
}

10. 脚本查询

使用脚本在products索引中计算并查询符合某个条件的产品(例如,价格与税的总和大于100):

GET /products/_search
{"query": {"script": {"script": {"source": "doc['price'].value + doc['tax'].value > 100"}}}
}

这些查询示例展示了Elasticsearch在处理各种复杂搜索和数据分析任务方面的强大能力。根据具体的业务需求,可以进一步定制和优化这些查询以获得最佳的搜索体验和性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Arduino开发实例-NEO-6M GPS模块使用

NEO-6M GPS模块使用 文章目录 NEO-6M GPS模块使用1、硬件准备1.1 NEO-6M GPS模块介绍1.2 硬件接线原理图2、代码实现2.1 GPS数据接收2.2 GPS数据组成2.3 解析GPS数据2.4 在OLED中显示GPS数据本文将展示如何将 NEO-6M GPS 模块与 Arduino 连接。 NEO-6M GPS 模块是一个 GPS 接收…

HJ9 提取不重复的整数【C语言】

【华为机试题 HJ9】提取不重复的整数 描述输入描述:输出描述:示例1参考代码1参考代码2描述 输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。 保证输入的整数最后一位不是 0 。 数据范围: 1 ≤ n ≤ 10^8 输入描述: 输入一个int型整数 …

[亲测有效]CentOS7下安装mysql5.7

前言 近期项目需要搭配mysql一起存储相关数据,但对mysql的版本有要求,于是在服务器搭建了mysql5.7,顺便记录一下搭建步骤和踩坑解决步骤。 目录 前言 一、清除旧安装包 二、安装YUM 三、使用yum命令即可完成安装 四、重新设置密码 五、…

美妆-美妆种类

粉底液 作用: 整体肤色提亮,匀称肤色,提升皮肤质感,轻微遮瑕, 中低价位:kate,妙巴黎 遮瑕 作用: 强力遮盖皮肤瑕疵 种类: 遮瑕膏,遮瑕液,遮…

JavaScript总结(三)

今日成果: 27.对象 var xiaoming { name:小明, birth:1990, school:No.1 Middle School, score:null, middle-school:no1.school//不是一个有效变量 }; xiaoming.name;//小明 xiaoming[middle-school];//no1.school xiaoming.age;//undefined…

文心一言 v.s. ChatGPT:多角度对比测评“追赶者”能否超越?

ChatGPT自发布以来就引发了关注热潮,如今国内大模型的发展也是如火如荼、百花齐放:比如百度的文心一言、阿里的通义千问、讯飞的星火大模型等等,那么作为后起之秀的国内大模型与ChatGPT相比哪个更好用呢?“追赶者”能否实现超越&a…

使用Unity创建VisionPro应用

1、下载特定Unity版本 Unity账号需要是Pro账号,普通账号不行,目前只支持这1个Unity版本,不要下载任何其它版本:unityhub://2022.3.11f1/d00248457e15) 其它条件:使用Mac电脑M系列芯片,XCode15 Beta2及以上 参考资料: 苹果官网:苹果官网 Unity官网:Unity官网 官方教程…

Network:use `--host` to expose

前言: 最近开始学习使用vite创建项目,但是 vite 启动后提示:Network:use --host to expose,从而导致在同一个局域网内的其他人也无法访问到我本地的项目。 导致原因:通过官方文档了解到不显示地址是因为IP没有做配置&a…

浏览器无网

目录 1.运行网络诊断,确认原因 原因A.远程计算机或设备将不接受连接(该设备或资源(Web 代理)未设置为接受端口“7890”上的连接 原因B.DNS服务器未响应 场景A.其他的浏览器可以打开网页,自带的Edge却不行 方法A:关闭代理 Google自带翻译…

【江科大】STM32:中断系统(理论)

文章目录 中断系统为什么要使用中断中断优先级中断嵌套STM32的中断系统如何管理这些中断NVIC的结构![请添加图片描述](https://img-blog.csdnimg.cn/c77b038fd63a4ddfbcd3b86f6dfe596b.png) 优先级窗口看门狗(WWDG):外部中断模块的特性&#…

《Python数据分析技术栈》第06章使用 Pandas 准备数据 04 DataFrames

04 DataFrames 《Python数据分析技术栈》第06章使用 Pandas 准备数据 04 DataFrames A DataFrame is an extension of a Series. It is a two-dimensional data structure for storing data. While the Series object contains two components - a set of values, and index …

MySQL语句 | FIELD()与ORDER BY()相结合实现对结果的自定义排序

在MySQL中,可将FIELD()与ORDER BY()结合使用,实现对查询结果的自定义规则排序。 举个通用的例子 假设有一个名为your_table的表,包含名为your_column的列,希望按照列your_column的值的特定顺序进行排序: SELECT * F…

从0开始学C++ 第二十八课 数据结构深入 - 栈和队列

第二十八课:数据结构深入 - 栈和队列 学习目标: 理解栈(Stack)的基本概念和特性。掌握队列(Queue)的基本概念和特性。学会在C中使用栈和队列。了解栈和队列的典型应用场景。 学习内容: 栈&am…

前后端分离项目中实现图形验证码

图形验证码在我们的日常生活中时经常用到的,一般用于用户的登录、注册等。 图形验证码在互联网应用中的作用是提高安全性、防止滥用和保护用户隐私。它是一种简单而有效的人机验证技术,帮助保护系统和用户免受自动化攻击的影响。 本次我们通过spring b…

损失函数是指什么

损失函数(Loss Function)是用来衡量模型预测输出与实际目标之间差异的函数。在机器学习和深度学习中,损失函数是模型训练的关键部分。其目标是通过最小化损失函数来使模型的预测尽可能接近实际的标签或目标值。 在监督学习中,模型…

跟着野火学FreeRTOS:第二段(队列管理)

队列( Q u e u e s Queues Queues)是 F r e e R T O S FreeRTOS FreeRTOS中的一种数据结构,这种数据结构提供了一种任务和任务之间,任务和中断之间的通信机制。队列可以存储一定有限数量的固定大小( u x I t e m S i z…

Adobe Media Encoder 2023下载安装教程,ME 2023安装教程,附安装包和工具,无套路,轻松搞的安装

前言 Adobe Media Encoder是一个视频和音频编码应用程序,可让针对不同应用程序和观众,以各种分发格式对音频和视频文件进行编码。包括专门设计的预设设置,以便导出与特定交付媒体兼容的文件,可以按适合多种设备的格式导出视频&am…

漫漫数学之旅010

文章目录 经典格言数学习题古今评注科学家小传(一)艾伦凯(二)托马斯C黑尔斯 经典格言 计算机的归宿是融入我们的生活,就像其它一切我们习以为常的东西:手表、纸、铅笔和衣服,我们不再把它们看作…

Hbas简介:数据模型和概念、物理视图

文章目录 说明零 BigTable一 Hbase简介二 HBase 访问接口简介三 行式&列式存储四 HBase 数据模型4.1 HBase 列族数据模型4.2 数据模型的相关概念4.3 数据坐标 五 概念&物理视图 说明 本文参考自林子雨老师的大数据技术原理与应用(第三版)教材内容,仅供学习…

maven pom中的内置变量及引用

目录 前言内置变量引用 前言 maven其实有很多内置变量供开发着在开发中使用,比如说basedir这变量,它指的是pom.xml文件所在的目录,下面我们一起来认识一下。 内置变量 变量名作用说明basedir 、project.basedir项目的根目录即包含 pom.xml 文…