一、数据操作语句
1. 文档增删改查(CRUD)
-
创建文档(PUT)
PUT /索引名/类型/文档ID { "字段1": "值1", "字段2": "值2", ... }
示例:创建一个用户文档
PUT /users/_doc/1 { "name": "张三", "age": 30, "email": "zhangsan@example.com" }
-
获取文档(GET)
GET /索引名/类型/文档ID
示例:获取 ID 为 1 的用户文档
GET /users/_doc/1
-
更新文档(POST/PUT)
- 全量更新(PUT):覆盖整个文档
PUT /users/_doc/1 { "name": "张三", "age": 31, // 年龄更新为31 "email": "zhangsan@example.com" }
- 部分更新(POST):仅修改指定字段
POST /users/_doc/1/_update { "doc": { "age": 31 } }
- 全量更新(PUT):覆盖整个文档
-
删除文档(DELETE)
DELETE /索引名/类型/文档ID
示例:删除 ID 为 1 的文档
DELETE /users/_doc/1
2. 批量操作(Bulk API)
用于高效批量处理文档(增删改查),减少网络开销:
POST /_bulk
{ "index": { "_index": "users", "_id": "2" } }
{ "name": "李四", "age": 25 }
{ "delete": { "_index": "users", "_id": "1" } }
{ "update": { "_index": "users", "_id": "3" } }
{ "doc": { "age": 40 } }
二、索引管理语句
1. 创建索引(PUT)
PUT /索引名
{
"settings": {
"number_of_shards": 3, // 主分片数
"number_of_replicas": 1 // 副本数
},
"mappings": {
"properties": {
"字段1": { "type": "text" }, // 文本类型(可分词)
"字段2": { "type": "keyword" }, // 关键词类型(精确匹配)
"字段3": { "type": "date" } // 日期类型
}
}
}
2. 查看索引(GET)
GET /索引名 // 查看单个索引
GET /索引名1,索引名2 // 查看多个索引
GET /_all // 查看所有索引
3. 删除索引(DELETE)
DELETE /索引名
4. 更新索引设置(PUT)
PUT /索引名/_settings
{
"number_of_replicas": 2 // 修改副本数
}
三、查询检索语句
1. 简单查询(Query DSL)
-
匹配查询(match):对文本字段进行分词匹配
GET /索引名/_search { "query": { "match": { "字段名": "查询关键词" } } }
示例:查询用户名为 “张三” 的文档
GET /users/_search { "query": { "match": { "name": "张三" } } }
-
精确匹配(term):对关键词字段进行精确匹配
GET /索引名/_search { "query": { "term": { "字段名.keyword": "精确值" } } }
-
短语匹配(match_phrase):要求关键词按顺序出现
GET /索引名/_search { "query": { "match_phrase": { "字段名": "短语查询" } } }
2. 复合查询
-
布尔查询(bool):组合多个查询条件
GET /索引名/_search { "query": { "bool": { "must": [ // 必须满足 { "match": { "字段1": "条件1" } } ], "should": [ // 至少满足一个 { "match": { "字段2": "条件2" } } ], "must_not": [ // 必须不满足 { "match": { "字段3": "条件3" } } ] } } }
-
范围查询(range):筛选指定范围的值
GET /索引名/_search { "query": { "range": { "字段名": { "gte": 10, // 大于等于 "lte": 100 // 小于等于 } } } }
3. 聚合查询(Aggregations)
用于统计分析数据,例如分组、排序、计算平均值等:
GET /索引名/_search
{
"size": 0, // 不返回文档,只返回聚合结果
"aggs": {
"分组名称": {
"terms": {
"field": "分组字段",
"size": 10
},
"aggs": {
"统计名称": {
"avg": { "field": "统计字段" } // 示例:计算平均值
}
}
}
}
}
四、其他常用语句
1. 查看集群健康状态
GET /_cluster/health
2. 查看集群节点信息
GET /_cat/nodes?v
3. 查看索引分片状态
GET /_cat/shards
Elasticsearch 使用场景
1. 全文搜索场景
- 典型场景:电商平台商品搜索、文档检索系统、论坛 / 博客搜索
- 优势:
- 支持分词、模糊匹配、短语查询等复杂搜索逻辑;
- 可对搜索结果进行相关性排序,提升用户体验;
- 相比数据库 like 查询,性能更高(倒排索引结构)。
2. 日志分析与监控
- 典型场景:ELK Stack(Elasticsearch+Logstash+Kibana)日志分析系统
- 优势:
- 实时收集、存储和分析海量日志数据;
- 通过 Kibana 可视化图表展示系统状态、错误趋势等;
- 支持日志聚合统计(如按时间、模块分组)。
3. 实时数据分析
- 典型场景:用户行为分析、业务指标监控、A/B 测试数据统计
- 优势:
- 支持实时数据摄入和近实时查询;
- 聚合查询(如分组、排序、统计)性能优异;
- 可与 BI 工具集成,生成动态报表。
4. 地理位置搜索
- 典型场景:地图应用附近地点搜索、物流轨迹查询
- 优势:
- 内置地理空间数据类型(geo_point),支持距离查询、区域筛选;
- 可按距离排序(如 “离我最近的餐厅”)。
5. 分布式数据存储与检索
- 典型场景:海量数据存储(如电商商品库、新闻文章库)
- 优势:
- 分布式架构支持 PB 级数据存储和水平扩展;
- 自动分片和副本机制保障高可用性和容错性;
- 支持多数据中心部署,满足异地容灾需求。