Elasticsearch RESTful API入门:基础搜索与查询DSL

Elasticsearch RESTful API入门:基础搜索与查询DSL

本文为Elasticsearch初学者详细解析RESTful API的核心操作与查询DSL语法,包含大量实战示例及最佳实践。

一、Elasticsearch与RESTful API简介

Elasticsearch(ES)作为分布式搜索分析引擎,其RESTful API是与集群交互的核心方式。通过HTTP协议实现:

  • ✅ 索引文档的CRUD操作
  • ✅ 执行复杂的搜索查询
  • ✅ 获取集群健康状况
  • ✅ 管理索引生命周期

核心概念速览

概念说明类比关系型数据库
索引(Index)文档的集合数据库的表
文档(Document)JSON格式的基本数据单元表中的一行记录
分片(Shard)索引的水平分割单元表分区
映射(Mapping)定义文档字段及类型表结构定义

二、基础API操作实战

1. 索引管理

# 创建索引
PUT /products
{"settings": {"number_of_shards": 3,"number_of_replicas": 1},"mappings": {"properties": {"name": {"type": "text"},"price": {"type": "float"},"category": {"type": "keyword"},"created_at": {"type": "date"}}}
}# 删除索引 (谨慎操作!)
DELETE /products### 2. 文档操作```bash
# 添加文档
POST /products/_doc/1001
{"name": "无线蓝牙耳机","price": 299.0,"category": "电子产品","created_at": "2023-05-10"
}# 获取文档
GET /products/_doc/1001# 更新文档
POST /products/_update/1001
{"doc": {"price": 259.0}
}# 删除文档
DELETE /products/_doc/1001

三、搜索API核心机制

1. 搜索端点

所有搜索请求发送到_search端点:

GET /products/_search

2. 两种查询方式对比

方式语法示例适用场景
URL参数查询?q=category:电子产品快速简单查询
DSL请求体查询JSON结构描述复杂查询逻辑生产环境推荐使用

四、查询DSL深度解析

1. 全文搜索 - match查询

GET /products/_search
{"query": {"match": {"name": {"query": "降噪耳机","operator": "and"}}}
}
  • 对文本 分词处理 ( “降噪耳机” → [“降噪”,“耳机”])

  • operator参数:and(必须全部包含) 或 or(包含任意词)

2. 精确匹配 - term查询

GET /products/_search
{"query": {"term": {"category.keyword": {"value": "电子产品"}}}
}
  • 注意使用.keyword子字段进行未分词的精确匹配

  • 适用于状态、标签等离散值字段

3. 范围查询 - range

GET /products/_search
{"query": {"range": {"price": {"gte": 200,"lte": 500}}}
}
  • 支持操作符:gt(>), gte(>=), lt(<), lte(<=)

  • 适用于数值、日期范围过滤

4. 布尔组合 - bool查询

GET /products/_search
{"query": {"bool": {"must": [{"match": {"name": "耳机"}}],"should": [{"term": {"category.keyword": "促销品"}},{"range": {"price": {"lte": 199}}}],"must_not": [{"term": {"brand.keyword": "A品牌"}}],"filter": [{"term": {"in_stock": true}}],"minimum_should_match": 1}}
}
子句作用是否影响相关性评分
must必须满足,相当于AND
should应该满足,相当于OR
must_not必须不满足,相当于NOT
filter必须满足,但不参与评分

5. 短语搜索 - match_phrase

GET /products/_search
{"query": {"match_phrase": {"description": {"query": "高清防水","slop": 3}}}
}

-要求词语 按顺序完整出现

-slop参数允许中间间隔的词数

五、搜索结果处理技巧

1. 分页与排序

GET /products/_search
{"from": 10,"size": 5,"sort": [{"price": {"order": "asc"}},{"_score": {"order": "desc"}}],"query": {...}
}

2. 字段过滤

GET /products/_search
{"_source": ["name", "price"],"query": {...}
}

3. 结果分析

典型搜索结果结构:

{"took": 15,                 // 查询耗时(ms)"timed_out": false,"hits": {"total": {"value": 42,            // 匹配总数"relation": "eq"},"max_score": 1.234,       // 最高得分"hits": [                 // 结果数组{"_index": "products","_id": "1001","_score": 1.234,"_source": {          // 原始文档"name": "无线蓝牙耳机","price": 299.0}}]}
}

六、最佳实践与避坑指南

  1. 精确匹配陷阱
     字符串字段默认同时创建textkeyword类型,精确匹配需用字段名.keyword

  2. 性能优化

"bool": {"filter": [   // 不参与评分的条件放filter{"range": {"created_at": {"gte": "now-30d/d"}}}]
}
  1. 深度分页问题
     避免使用from+size处理超过10,000条的结果集,改用search_afterscrollAPI
  2. 安全防护
     生产环境必须启用:

   - X-Pack安全模块

   - API密钥认证

   - 网络访问控制

七、学习资源推荐

  1. 官方文档:Elasticsearch Reference
  2. 实战工具:
    - Kibana Dev Tools
    - Postman
    - curl命令
    附录:常用查询速查表
查询类型用途示例
match全文搜索{“match”: {“title”: “ES”}}
term精确值匹配{“term”: {“status”: 1}}
range范围查询{“range”: {“age”: {“gte”: 18}}}
bool组合多个查询条件见第四节示例
match_phrase短语搜索{“match_phrase”: {“quote”: “to be or”}}

下集预告《Elasticsearch RESTful API入门:全文搜索实战》

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

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

相关文章

(六)复习(OutBox Message)

文章目录 项目地址一、OutBox Message1.1 OutBox表配置1. OutBoxMessage类2. OutboxMessage表配置3. 给每个模块生成outboxmessage表1.2 发布OutBox Message1. 修改Intercepotor2. 配置Quartz3. 创建Quatz方法发布领域事件4. 创建Quatz定时任务5. 注册Quatz服务和配置6. 流程梳…

STM32-ADC内部温度

在通道16无引脚&#xff08;测量温度不准确&#xff09;跟ADC代码差不多&#xff1b;不需要使能引脚时钟&#xff1b;将内部温度测量打开/*** brief 启用或禁用温度传感器和内部参考电压功能* param NewState: 新的功能状态&#xff0c;取值为ENABLE或DISABLE* retval 无* no…

「Linux命令基础」文本模式系统关闭与重启

关机重启基本命令 直接拔掉计算机电源可能损坏内部元件;Linux系统通过命令关闭计算机则是安全流程,让所有程序有机会保存数据、释放资源。 关机命令:shutdown Linux系统提供了多种用于关闭或重启系统的命令,其中 shutdown 是最常用的一种,它可以安全地通知用户系统即将…

射频信号(大宽高比)时频图目标检测anchors配置

一、大宽高比目标YOLO检测参数设置 这是yolov7的一个label的txt文件&#xff1a; 1 0.500 0.201 1.000 0.091 2 0.500 0.402 1.000 0.150 3 0.500 0.604 1.000 0.093 0 0.500 0.804 1.000 0.217 对应的样本&#xff1a; 长宽比分别是&#xff1a;1/0.09110.98, 1/0.1506.67…

OpenStack 鉴权服务介绍.md

引言 OpenStack是一个开源的云计算管理平台&#xff0c;其中的Keystone组件承担了身份认证和授权的关键任务。Keystone的主要功能包括管理用户及其权限、维护OpenStack Services的Endpoint&#xff0c;以及实现认证&#xff08;Authentication&#xff09;和鉴权&#xff08;Au…

Linux_3:进程间通信

IPC1.什么是IPC&#xff1f;Inter Process Communication2.进程间通信常用的几种方式1&#xff0c;管道通信&#xff1a;有名管道&#xff0c;无名管道2&#xff0c;信号- 系统开销小3&#xff0c;消息队列-内核的链表4&#xff0c;信号量-计数器5&#xff0c;共享内存6&#x…

【Springboot】Bean解释

在 Spring Boot 中&#xff0c;Bean 就像是你餐厅里的一名员工。比如&#xff0c;你有一名服务员&#xff08;Service&#xff09;、一名厨师&#xff08;Chef&#xff09;和一名收银员&#xff08;Cashier&#xff09;。这些员工都是餐厅正常运转所必需的&#xff0c;他们各自…

axios的post请求,数据为什么要用qs处理?什么时候不用?

为什么使用 qs 处理 POST 数据axios 的 POST 请求默认将 JavaScript 对象序列化为 JSON 格式&#xff08;Content-Type: application/json&#xff09;。但某些后端接口&#xff08;尤其是传统表单提交&#xff09;要求数据以 application/x-www-form-urlencoded 格式传输&…

【unitrix】 4.21 类型级二进制数基本结构体(types.rs)

一、源码 这段代码定义了一个类型级数值系统的 Rust 实现&#xff0c;主要用于在编译时表示和操作各种数值类型。 use crate::sealed::Sealed; use crate::number::{NonZero, TypedInt, Unsigned, Primitive}; // // 特殊浮点值枚举 ///// 特殊浮点值&#xff08;NaN/∞&#x…

UI前端与数字孪生结合实践案例:智慧零售的库存管理优化系统

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!一、引言&#xff1a;数字孪生重构零售库存的 “人 - 货 - 场” 协同在零售行业利润率持续承压的背景…

【Freertos实战】零基础制作基于stm32的物联网温湿度检测(教程非常简易)持续更新中.........

本次记录采用Freertos的第二个DIY作品&#xff0c;基于Onenet的物联网温湿度检测系统&#xff0c;此次代码依然是全部开源。通过网盘分享的文件&#xff1a;物联网温湿度检测.rar 链接: https://pan.baidu.com/s/1uj9UURVtGE6ZB6OsL2W8lw?pwdqm2e 提取码: qm2e 大家也可以看看…

Matplotlib-多图布局与网格显示

Matplotlib-多图布局与网格显示一、多图布局的核心组件二、基础布局&#xff1a;plt.subplots()快速创建网格1. 均等分网格2. 不等分网格&#xff08;指定比例&#xff09;三、进阶布局&#xff1a;GridSpec实现复杂嵌套1. 跨行列布局2. 嵌套GridSpec四、实用技巧&#xff1a;布…

GitHub上优秀的开源播放器项目介绍及优劣对比

ExoPlayer 项目地址:https://github.com/google/ExoPlayer 特点: 由Google开发,支持广泛的视频格式和流媒体传输协议,如DASH、HLS、SmoothStreaming。 提供灵活的媒体源架构和高级特性,如动态自适应流播放。 开发者可以轻松扩展和定制播放器组件,适应特定需求。 优点: 功…

react打包发到线上报错Minified React error #130

开发过程中遇到一个问题&#xff0c;记录一下 本地打包发布正常&#xff0c;发测试环境正常&#xff0c;可是通过Jenkins打包发布线上报错 报错信息 index-67fbbd81.js:39 Error: Minified React error #130; visit https://reactjs.org/docs/error-decoder.html?invariant130…

微服务项目远程调用时的负载均衡是如何实现的?

负载均衡概述 负载均衡是微服务架构中的核心组件&#xff0c;用于将请求合理分配到多个服务实例上&#xff0c;提高系统的可用性和性能。负载均衡的分类 负载均衡大致可以分为两类 1. 服务端负载均衡 实现位置&#xff1a;独立部署的负载均衡服务器&#xff08;位于客户端和服务…

【中文核心期刊推荐】中国农业科技导报

《中国农业科技导报》是中国科技核心期刊&#xff0c;也是北京大学图书馆“中文核心期刊要目总览”收录的期刊。它是由中国农村技术开发中心主办&#xff0c;全面为科教兴农服务的综合性农业学术期刊。&#xfeff;《中国农业科技导报》是中国农业科学院生物技术研究所承办的&a…

php 如何通过mysqli操作数据库?

在PHP中&#xff0c;mysqli&#xff08;MySQL Improved Extension&#xff09;是操作MySQL数据库的扩展库&#xff0c;提供了面向对象和过程式两种风格。以下是mysqli的基本操作方法&#xff1a; 1. 连接数据库 面向对象风格 $mysqli new mysqli(localhost, username, passwor…

c/c++拷贝函数

memcpy()函数概要原型void * memcpy ( void * dest, const void * src, size_t num );功能memcpy()会复制 src 所指的内存内容的前 num 个字节到 dest所指的内存地址上&#xff08;memcpy()并不关心被复制的数据类型&#xff0c;只是逐字节地进行复制&#xff0c;这给函数的使用…

HTTP核心基础详解(附实战要点)

目录 一图胜千言&#xff1a;HTTP核心机制图解​编辑 一、HTTP本质&#xff1a;通信的桥梁 二、五大核心特性解析 三、HTTP头部&#xff1a;隐藏的控制中心 四、连接管理&#xff1a;性能关键点 开发者必知实践技巧 一图胜千言&#xff1a;HTTP核心机制图解 一、HTTP本质…

华为静态路由配置

问题描述&#xff1a;针对两台笔记本和两个路由器在不同的网段场景中&#xff0c;对两个路由器进行静态路由配置。下面以如下场景为例&#xff0c;介绍详细配置过程。配置步骤&#xff1a; 1、对每个路由器的接口下配置IP地址 [huawei]interface gx/x/x [huawei-interface]ip a…