欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 【Elasticsearch基础】CRUD操作实践

【Elasticsearch基础】CRUD操作实践

2025/4/2 12:08:03 来源:https://blog.csdn.net/qq_43715111/article/details/146543027  浏览:    关键词:【Elasticsearch基础】CRUD操作实践

Elasticsearch作为最流行的搜索和分析引擎,其核心CRUD(创建、读取、更新、删除)操作是每个开发者必须掌握的技能。本文将详细介绍Elasticsearch的基础数据操作,并提供可直接复用的curl示例。

1 创建索引与文档

1.1 创建索引

// 语法
PUT /<index_name>
{"settings": { ... },  # 索引配置"mappings": { ... }   # 字段映射
}
// 创建简单索引(自动应用默认映射)
curl -X PUT "http://192.168.10.33:9200/myindex" -H 'Content-Type: application/json' -d'
{"settings": {"number_of_shards": 3,"number_of_replicas": 1}
}'// 创建带自定义映射的索引
curl -X PUT "http://192.168.10.33:9200/myindex_1" -H 'Content-Type: application/json' -d'
{"mappings": {"properties": {"title": { "type": "text" },"views": { "type": "integer" },"publish_date": { "type": "date" }}}
}'

1.2 添加文档

# 指定ID创建文档
curl -X POST "http://192.168.10.33:9200/myindx/_doc/1" -H 'Content-Type: application/json' -d'
{"name": "无线耳机","price": 799,"stock": 200
}'# 自动生成ID创建文档
curl -X POST "http://192.168.10.33:9200/myindex_1/_doc" -H 'Content-Type: application/json' -d'
{"name": "智能手表","price": 2999
}'# 批量创建文档(更高效)
curl -X POST "http://192.168.10.33:9200/_bulk" -H 'Content-Type: application/json' -d'
{ "index" : { "_index" : "myindex", "myindex_1" : "2" } }
{ "name": "蓝牙音箱", "price": 299 }
{ "index" : { "_index" : "myindex", "_id" : "3" } }
{ "name": "电子书阅读器", "price": 899 }
'

2 查询文档

2.1 基础查询

# 按ID查询文档
curl -X GET "http://192.168.10.33:9200/myindex_1/_doc/1?pretty"# 检查文档是否存在
curl -I "http://192.168.10.33:9200/myindex/_doc/1"# 获取多个文档
curl -X GET "http://192.168.10.33:9200/_mget" -H 'Content-Type: application/json' -d'
{"docs": [{ "_index": "myindex_1", "_id": "1" },{ "_index": "myindex_1", "_id": "2" }]
}'

2.2 搜索API

# 简单全文搜索
curl -X GET "http://192.168.10.33:9200/myindex/_search" -H 'Content-Type: application/json' -d'
{"query": {"match": {"name": "智能"}}
}'# 复合查询
curl -X GET "http://192.168.10.33:9200/myindx/_search" -H 'Content-Type: application/json' -d'
{"query": {"bool": {"must": [{ "match": { "name": "电子" } }],"filter": [{ "range": { "price": { "gte": 500, "lte": 1000 } } }]}},"sort": [{ "price": { "order": "desc" } }],"from": 0,"size": 5
}'

3 更新文档

3.1 全量替换

# 完全替换文档内容(需提供所有字段)
curl -X PUT "http://192.168.10.33:9200/myindx/_doc/1" -H 'Content-Type: application/json' -d'
{"name": "无线耳机","price": 699,"color": "black"
}'

3.2 部分更新

# 更新单个字段
curl -X POST "http://192.168.10.33:9200/myindex/_update/1" -H 'Content-Type: application/json' -d'
{"doc": {"price": 649}
}'# 带条件的更新(仅当stock>0时执行)
curl -X POST "http://192.168.10.33:9200/myindex/_update/1" -H 'Content-Type: application/json' -d'
{"script": {"source": "ctx._source.price -= params.discount","params": {"discount": 50}},"upsert": {"name": "无线耳机","price": 699}
}'# 批量更新
curl -X POST "http://192.168.10.33:9200/myindex_1" -H 'Content-Type: application/json' -d'
{ "update" : { "_index" : "myindex", "_id" : "1" } }
{ "doc" : { "price" : 599 } }
{ "update" : { "_index" : "myindex", "_id" : "2" } }
{ "script" : { "source": "ctx._source.stock -= 1" } }
'

4 删除操作

4.1 删除文档

# 按ID删除
curl -X DELETE "http://192.168.10.33:9200/myindx/_doc/1"# 按查询删除
curl -X POST "http://192.168.10.33:9200/myindx/_delete_by_query" -H 'Content-Type: application/json' -d'
{"query": {"range": {"price": { "lt": 300 }}}
}'# 批量删除
curl -X POST "http://192.168.10.33:9200/myindx_1" -H 'Content-Type: application/json' -d'
{ "delete" : { "_index" : "myindx", "_id" : "2" } }
{ "delete" : { "_index" : "myindx", "_id" : "3" } }
'

4.2 删除索引

# 删除整个索引(不可逆操作!)
curl -X DELETE "http://192.168.10.33:9200/myindx"# 删除多个索引
curl -X DELETE "http://192.168.10.33:9200/index1,index2"# 使用通配符删除
curl -X DELETE "http://192.168.10.33:9200/myindx_2025_01_*"

5 常见错误与解决方案

错误现象

可能原因

解决方案

无法创建文档(409 Conflict)

文档ID已存在

使用PUT覆盖或生成新ID

更新文档版本冲突(409 Conflict)

文档被其他进程修改

获取最新版本后重试

查询返回部分结果(503 Service Unavailable)

分片未分配

检查集群状态,调整分片分配策略

索引只读(403 Forbidden)

磁盘空间不足

清理空间或调整索引配置

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词