当前位置: 首页 > news >正文

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.dtcms.com/a/270621.html

相关文章:

  • C#项目 在Vue/React前端项目中 使用使用wkeWebBrowser引用并且内部使用iframe网页外链 页面部分白屏
  • 数据管理新范式:基于Docker的私有云存储系统构建指南
  • 十一、K8s细粒度权限管理RBAC
  • 异步进阶:C#的Task.WhenAll——如何开启多个异步任务
  • ReactNative【实战系列教程】我的小红书 6 -- 购物(含商品搜索、商品分类、商品列表)
  • 编写产品需求文档:黄历日历小程序
  • [Leetcode] 预处理 | 多叉树bfs | 格雷编码 | static_cast | 矩阵对角线
  • React面试高频考点解析
  • LeetCode Hot 100 搜索二维矩阵 II
  • langchain从入门到精通(四十一)——基于ReACT架构的Agent智能体设计与实现
  • [附源码+数据库+毕业论]基于Spring Boot+mysql+vue结合内容推荐算法的学生咨询系统
  • RedisCommandExecutionException: ERR unknown command ‘LPOS‘
  • 树莓派5-系统 Debian 12 开启VNC远程访问踩坑记录
  • vue3面试题(个人笔记)
  • uniapp AndroidiOS 定位权限检查
  • ragflow_多模态文档解析与正文提取策略
  • 《设计模式之禅》笔记摘录 - 5.代理模式
  • Flutter基础(前端教程⑨-图片)
  • Robot之眼CMOS传感器静电防护指南
  • LeetCode热题100—— 32. 最长有效括号 (hard)
  • 零基础上手 Amazon DynamoDB:NoSQL 数据库服务的核心概念与快速搭建指南
  • Android-重学kotlin(协程源码第二阶段)新学习总结
  • 安全管理协议(SMP):配对流程、密钥生成与防中间人攻击——蓝牙面试核心考点精解
  • Qt自定义控件(9)——径向渐变QRadialGradient、圆锥渐变QConicalGradient
  • 华为OD机试_2025 B卷_观看文艺汇演问题(Python,100分)(附详细解题思路)
  • Amazon S3 对象存储服务深度解析:存储原理、应用场景与实战指南
  • Hexo + Butterfly + Vercel 完整个人Blog部署指南
  • 量子化学计算GPU化:ORCA与Gaussian的CUDA加速对比(电子积分计算中的Warpshuffle指令实战应用)
  • 如何给网页增加滚动到顶部的功能
  • 【具身智能】本地实时语音识别kaldi在正点原子RK3588上部署