ElasticSearch各种查询语法示例

news2025/5/24 20:44:03

1. 每种查询语法的区别与优缺点

Query DSL
  • 区别: JSON 格式的结构化查询,功能强大,支持复杂查询逻辑,适用于 Elasticsearch 的核心查询场景。
  • 优点: 灵活,功能全面,支持全文搜索、精确匹配、聚合等;可组合多种查询类型。
  • 缺点: 语法复杂,学习曲线较陡;JSON 格式对新手不友好。
SQL Query
  • 区别: 使用标准 SQL 语法,适合熟悉关系型数据库的用户。
  • 优点: 语法简单,易于上手;与传统 SQL 数据库兼容性高,适合快速查询。
  • 缺点: 功能受限,无法完全发挥 Elasticsearch 的全文搜索和复杂查询能力。
EQL (Event Query Language)
  • 区别: 专注于时间序列和事件数据,适合分析日志、事件流等场景。
  • 优点: 针对事件序列分析优化,支持时间相关查询;语法直观。
  • 缺点: 应用场景较窄,仅限事件数据;功能不如 Query DSL 全面。
Painless Scripting
  • 区别: 基于脚本的查询,允许自定义逻辑,操作字段值或复杂条件。
  • 优点: 高度灵活,可实现复杂计算或过滤逻辑。
  • 缺点: 性能开销大,脚本错误可能导致查询失败;调试困难。
Kibana Console Query
  • 区别: 通过 Kibana 的 REST API 风格执行查询,结合 HTTP 方法操作 Elasticsearch。
  • 优点: 直观,适合调试和快速测试;与 Query DSL 无缝集成。
  • 缺点: 依赖 Kibana 界面,手动输入 JSON 查询效率较低。

2. 带解释的查询示例

Query DSL

a. Match Query

{
  "query": {
    "match": {
      "name": "apple phone"
    }
  }
}
  • 解释: 全文搜索 name 字段中包含 “apple” 或 “phone” 的文档。使用分词器匹配,适合模糊搜索。
  • 场景: 搜索产品名称包含 “apple phone” 的商品。

b. Match with Fuzziness

{
  "query": {
    "match": {
      "name": {
        "query": "apple phone",
        "fuzziness": "AUTO"
      }
    }
  }
}
  • 解释: 允许模糊匹配,容忍拼写错误(如 “aple” 匹配 “apple”)。fuzziness: AUTO 自动调整容错范围。
  • 场景: 用户输入可能有误时,增强搜索容错。

c. Term Query

{
  "query": {
    "term": {
      "category": "electronics"
    }
  }
}
  • 解释: 精确匹配 category 字段为 “electronics” 的文档,不分词。
  • 场景: 查找特定类别的产品,如电子产品。

d. Terms Query

{
  "query": {
    "terms": {
      "category": ["electronics", "accessories"]
    }
  }
}
  • 解释: 匹配 category 字段为 “electronics” 或 “accessories” 的文档。
  • 场景: 筛选多个特定类别的产品。

e. Range Query

{
  "query": {
    "range": {
      "price": {
        "gte": 100,
        "lte": 500
      }
    }
  }
}
  • 解释: 查找 price 字段在 100 到 500 之间的文档。
  • 场景: 筛选价格区间内的产品。

f. Bool Query

{
  "query": {
    "bool": {
      "must": [
        { "match": { "name": "phone" } },
        { "range": { "price": { "lte": 1000 } } }
      ],
      "filter": [
        { "term": { "category": "electronics" } }
      ]
    }
  }
}
  • 解释: 组合查询,must 要求 name 包含 “phone” 且 price ≤ 1000,filter 要求 category 为 “electronics”。filter 不影响评分,性能更高。
  • 场景: 复杂条件筛选,如电子产品中价格低于 1000 的手机。

g. Exists Query

{
  "query": {
    "exists": {
      "field": "description"
    }
  }
}
  • 解释: 返回具有非空 description 字段的文档。
  • 场景: 筛选有描述信息的产品。

h. Wildcard Query

{
  "query": {
    "wildcard": {
      "name": "app*"
    }
  }
}
  • 解释: 匹配 name 字段以 “app” 开头的文档,* 表示任意字符。
  • 场景: 搜索以 “app” 开头的产品名称。

i. Nested Query

{
  "query": {
    "nested": {
      "path": "comments",
      "query": {
        "match": { "comments.text": "good" }
      }
    }
  }
}
  • 解释: 查询嵌套字段 commentstext 包含 “good” 的文档。处理嵌套对象关系。
  • 场景: 搜索包含正面评论的产品。
SQL Query

a. Basic SELECT

SELECT name, price FROM products WHERE price > 100
  • 解释: 返回 price 大于 100 的文档,仅显示 nameprice 字段。
  • 场景: 快速查看高价产品的基本信息。

b. With Conditions

SELECT * FROM products WHERE category = 'electronics' AND price BETWEEN 200 AND 500
  • 解释: 筛选 category 为 “electronics” 且 price 在 200-500 之间的所有字段。
  • 场景: 查找特定类别和价格范围的产品。

c. Aggregation

SELECT category, AVG(price) FROM products GROUP BY category
  • 解释: 按 category 分组,计算每组的平均 price
  • 场景: 分析各产品类别的平均价格。
EQL

a. Sequence Query

{
  "query": "sequence [event where event_type == 'login'] [event where event_type == 'logout' by user_id]"
}
  • 解释: 查找按 user_id 关联的连续事件,先 loginlogout
  • 场景: 分析用户登录和登出行为序列。

b. Simple Event Query

{
  "query": "event where event_type == 'error' and severity > 3"
}
  • 解释: 查找 event_type 为 “error” 且 severity 大于 3 的事件。
  • 场景: 筛选高严重性错误日志。
Painless Scripting

a. Field Calculation

{
  "query": {
    "script_score": {
      "query": { "match_all": {} },
      "script": {
        "source": "doc['price'].value * 0.9"
      }
    }
  }
}
  • 解释: 对所有文档的 price 字段值乘以 0.9,影响搜索评分。
  • 场景: 动态调整价格用于排序(如折扣计算)。

b. Filter with Script

{
  "query": {
    "bool": {
      "filter": {
        "script": {
          "script": {
            "source": "doc['price'].value > params.min_price",
            "params": { "min_price": 100 }
          }
        }
      }
    }
  }
}
  • 解释: 过滤 price 大于 100 的文档,使用参数化脚本。
  • 场景: 动态设置价格过滤条件。
Kibana Console Query

a. Simple GET

GET products/_search
{
  "query": {
    "match": {
      "name": "phone"
    }
  }
}
  • 解释: 通过 REST API 搜索 name 包含 “phone” 的文档。
  • 场景: 在 Kibana 控制台快速测试查询。

b. Aggregation

GET products/_search
{
  "aggs": {
    "by_category": {
      "terms": { "field": "category" }
    }
  }
}
  • 解释: 按 category 字段分组,统计每个类别的文档数。
  • 场景: 分析产品类别分布。

注意

  • 每个查询语法针对不同场景:Query DSL 适合复杂查询,SQL 适合快速上手,EQL 适合事件分析,Painless 适合自定义逻辑,Kibana 适合调试。
  • 示例基于通用字段,实际使用需调整字段名和索引。
  • 更多细节参考:https://www.elastic.co/docs/reference/query-languages/

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

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

相关文章

CUDA的设备,流处理器(Streams),核,线程块(threadblock),线程,网格(‌gridDim),块(block)和多gpu设备同步数据概念

CUDA的设备,流处理器,核,线程块(threadblock),线程,网格(‌gridDim),块(block)和多gpu设备同步数据概念 CUDA的设备,流处理器,核&…

LeetCode 1340. 跳跃游戏 V(困难)

题目描述 给你一个整数数组 arr 和一个整数 d 。每一步你可以从下标 i 跳到&#xff1a; i x &#xff0c;其中 i x < arr.length 且 0 < x < d 。i - x &#xff0c;其中 i - x > 0 且 0 < x < d 。 除此以外&#xff0c;你从下标 i 跳到下标 j 需要满…

x-cmd install | cargo-selector:优雅管理 Rust 项目二进制与示例,开发体验升级

目录 功能亮点安装优势特点适用场景总结 还在为 Rust 项目中众多的二进制文件和示例而烦恼吗&#xff1f;cargo-selector 让你告别繁琐的命令行&#xff0c;轻松选择并运行目标程序&#xff01; 功能亮点 交互式选择&#xff1a; 在终端中以交互方式浏览你的二进制文件和示例&…

大模型「瘦身」指南:从LLaMA到MobileBERT的轻量化部署实战

大模型「瘦身」指南&#xff1a;从LLaMA到MobileBERT的轻量化部署实战 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 大模型「瘦身」指南&#xff1a;从LLaMA到MobileBERT的轻量化部署实战摘要引言一、轻量化技术…

从逻辑视角学习信息论:概念框架与实践指南

文章目录 一、信息论的逻辑基础与哲学内涵1.1 信息的逻辑本质&#xff1a;区分与差异1.2 逆范围原理与信息内容 二、信息论与逻辑学的概念交汇2.1 熵作为逻辑不确定性的度量2.2 互信息与逻辑依赖2.3 信道容量的逻辑极限 三、信息论的核心原理与逻辑基础3.1 最大熵原理的逻辑正当…

TDengine 运维—容量规划

概述 若计划使用 TDengine 搭建一个时序数据平台&#xff0c;须提前对计算资源、存储资源和网络资源进行详细规划&#xff0c;以确保满足业务场景的需求。通常 TDengine 会运行多个进程&#xff0c;包括 taosd、taosadapter、taoskeeper、taos-explorer 和 taosx。 在这些进程…

PPP 拨号失败:ATD*99***1# ... failed

从日志来看&#xff0c;主要有两类问题&#xff1a; 一、led_indicator_stop 报 invalid p_handle E (5750) led_indicator: …/led_indicator.c:461 (led_indicator_stop):invalid p_handle原因分析 led_indicator_stop() 的参数 p_handle &#xff08;即之前 led_indicator…

【计网】五六章习题测试

目录 1. (单选题, 3 分)某个网络所分配到的地址块为172.16.0.0/29&#xff0c;能接收目的地址为172.16.0.7的IP分组的最大主机数是&#xff08; &#xff09;。 2. (单选题, 3 分)若将某个“/19”的CIDR地址块划分为7个子块&#xff0c;则可能的最小子块中的可分配IP地址数量…

汇川EasyPLC MODBUS-RTU通信配置和编程实现

累积流量计算(MODBUS RTU通信数据处理)数据处理相关内容。 累积流量计算(MODBUS RTU通信数据处理)_流量积算仪modbus rtu通讯-CSDN博客文章浏览阅读219次。1、常用通信数据处理MODBUS通信系列之数据处理_modbus模拟的数据变化后会在原来的基础上累加是为什么-CSDN博客MODBUS通…

从 CANopen到 PROFINET:网关助力物流中心实现复杂的自动化升级

使用 CANopen PLC 扩展改造物流中心的传送带 倍讯科技profinet转CANopen网关BX-601-EIP将新的 PROFINET PLC 系统与旧的基于 CANopen 的传送带连接起来&#xff0c;简化了物流中心的自动化升级。 新建还是升级&#xff1f;这些问题通常出现在复杂的内部物流设施中&#xff0c;…

基于Yolov8+PyQT的老人摔倒识别系统源码

概述 ​​基于Yolov8PyQT的老人摔倒识别系统​​&#xff0c;该系统通过深度学习算法实时检测人体姿态&#xff0c;精准识别站立、摔倒中等3种状态&#xff0c;为家庭或养老机构提供及时预警功能。 主要内容 ​​完整可运行代码​​ 项目采用Yolov8目标检测框架结合PyQT5开发…

wsl2 不能联网

wsl2 安装后用 wifi 共享是能联网&#xff0c;问题出在公司网络限制 wsl2 IP 访问网络&#xff0c;但是主机可以上网。 解决办法&#xff0c;在主机用 nginx 设置代理&#xff0c;可能需要开端口权限 server {listen 9000;server_name localhost;location /ubuntu/ {#…

Java[IDEA]里的debug

目录 前言 Debug 使用Debug 总结 前言 这里我说一下就是 java IDEA 工具里的debug工具 里的一个小问题 就是 当我们使用debug去查看内部文档 查看不到 是为什么 Debug 所谓 debug 工具 他就是用来调试程序的 当我们写代码 报错 出错时 我们就可以使用这个工具 因此这个工具…

DAO模式

1. 持久化 简单来说&#xff0c;就是把代码的处理结果转换成需要的格式进行储存。 2. JDBC的封装 3. DAO模式 4. Properties类与Properties配置文件 添加 读取 5. 使用实体类传递数据 6. 总结 附录&#xff1a; BaseDao指南 BaseDao指南-CSDN博客

ECharts图表工厂,完整代码+思路逻辑

Echart工厂支持柱状图&#xff08;bar&#xff09;折线图&#xff08;line&#xff09;散点图&#xff08;scatter&#xff09;饼图&#xff08;pie&#xff09;雷达图&#xff08;radar&#xff09;极坐标柱状图&#xff08;polarBar&#xff09;和极坐标折线图&#xff08;po…

CSS:margin的塌陷与合并问题

文章目录 一、margin塌陷问题二、margin合并问题 一、margin塌陷问题 二、margin合并问题

探索服务网格(Service Mesh):云原生时代的网络新范式

文章目录 一、引言二、什么是服务网格基本定义形象比喻 三、服务网格解决了哪些问题微服务通信复杂性可观察性安全性 四、常见的服务网格实现IstioLinkerdConsul Connect 五、服务网格的应用场景大型微服务架构混合云环境 六、服务网格的未来发展与其他技术的融合标准化和行业规…

SQL SERVER中实现类似LEAST函数的功能,返回多列数据中的最小值

使用 LEAST&#xff08;&#xff09;函数可以简洁地在一行SQL语句中找出多个值中的最小值&#xff0c;但在SQLServer数据库中&#xff0c;没有内置的LEAST函数。 我们可以使用values子句创建临时的数据集的办法&#xff0c;返回多列数据中的最小值。 创建表 CREATE TABLE stu…

SymPy | 获取表达式自由变量方法与因式分解

SymPy 是 Python 中强大的符号计算库&#xff0c;广泛应用于数学建模、公式推导和科学计算。本文将从两个核心功能展开&#xff1a;表达式中自由变量的获取与因式分解的实现&#xff0c;通过完整代码示例和深入分析&#xff0c;帮助读者掌握其使用方法。 第一部分&#xff1a;获…

深度剖析并发I/O模型select、poll、epoll与IOCP核心机制

核心概要&#xff1a;select、poll、epoll 和 IOCP 是四种用于提升服务器并发处理能力的I/O模型或机制。前三者主要属于I/O多路复用范畴&#xff0c;允许单个进程或线程监视多个I/O流的状态&#xff1b;而 IOCP 则是一种更为彻底的异步I/O模型。 一、引言&#xff1a;为何需要这…