elasticsearch - 6.3.2 API

本文演示了如何使用curl命令通过RESTfulAPI对Elasticsearch进行索引创建、文档添加、更新、删除及批量处理等基本操作,包括指定ID和自动创建索引、文档检索以及使用脚本更新文档。

索引操作

//创建一个索引,pretty表示打印添加状态

curl -X PUT "localhost:9200/customer?pretty"

//获取索引列表
curl -X GET "localhost:9200/_cat/indices?v"

//向索引中添加一个文档,指定ID为1,如果索引不存在es会自动创建
curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H 'Content-Type: application/json' -d'
{
  "name": "John Doe"
}'

//向索引中添加一个文档,没有指定ID,es将自动创建
curl -X POST "localhost:9200/customer/_doc?pretty" -H 'Content-Type: application/json' -d'
{
  "name": "Jane Doe"
}'

//检索编入索引的文档
curl -X GET "localhost:9200/customer/_doc/1?pretty"

//删除索引
curl -X DELETE "localhost:9200/customer?pretty"


更新文档

//更新ID为1的文档
curl -X POST "localhost:9200/customer/_doc/1/_update?pretty" -H 'Content-Type: application/json' -d'
{
  "doc": { "name": "Jane Doe" }
}'

//更新ID为1的文档,并且增加属性
curl -X POST "localhost:9200/customer/_doc/1/_update?pretty" -H 'Content-Type: application/json' -d'
{
  "doc": { "name": "Jane Doe", "age": 20 }
}'

//使用脚本更新文档,ctx._source代表当前要更新的文档(此处表示年龄在原来的基础上再加5)
curl -X POST "localhost:9200/customer/_doc/1/_update?pretty" -H 'Content-Type: application/json' -d'
{
  "script" : "ctx._source.age += 5"
}'


删除文档

//删除文档指定ID为2
curl -X DELETE "localhost:9200/customer/_doc/2?pretty"

批量处理:

//批量插入两条数据,ID分别为3和4
curl -X POST "localhost:9200/customer/_doc/_bulk?pretty" -H 'Content-Type: application/json' -d'
{"index":{"_id":"3"}}
{"name": "John Doe" }
{"index":{"_id":"4"}}
{"name": "Jane Doe" }
'

//此示例更新第一个文档(ID为1),然后在一个批量操作中删除第二个文档(ID为2):
curl -X POST "localhost:9200/customer/_doc/_bulk?pretty" -H 'Content-Type: application/json' -d'
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}
'
 

`java.lang.RuntimeException: error while performing request` 是一个通用的异常信息,在 Elasticsearch 6.3.2 中出现该告警可能由以下多种原因导致: ### 网络问题 - **网络连接不稳定**:Elasticsearch 集群节点间的网络连接不稳定,可能会导致请求在传输过程中丢失或超时,进而引发此异常。例如,在跨数据中心部署时,如果网络延迟过高或带宽不足,请求就难以正常完成。 - **防火墙配置错误**:防火墙可能会阻止 Elasticsearch 节点之间或者客户端与节点之间的通信。比如,防火墙规则限制了 Elasticsearch 使用的默认端口(如 9200 和 9300)的流量,使得请求无法顺利到达目标节点。 ### 资源不足 - **内存不足**:Elasticsearch 是一个内存密集型应用程序,如果节点的物理内存不足,可能会导致请求处理失败。当内存耗尽时,操作系统可能会开始进行交换(swap),这会极大地降低 Elasticsearch 的性能,甚至导致请求超时。 - **磁盘空间不足**:如果磁盘空间接近或达到上限,Elasticsearch 可能无法正常写入数据,从而引发请求错误。例如,当索引分片无法分配到磁盘上时,对该分片的请求就会失败。 ### 集群状态问题 - **集群未健康**:当 Elasticsearch 集群处于不健康状态(如存在未分配的分片)时,可能会影响请求的处理。例如,部分分片丢失或未分配到节点上,会导致数据不完整,从而使得相关请求无法正常执行。 - **节点故障**:集群中的某个节点出现故障(如硬件故障、进程崩溃等),可能会导致请求无法路由到正确的节点,进而引发异常。 ### 配置问题 - **配置参数不合理**:Elasticsearch 的一些配置参数(如线程池大小、请求超时时间等)设置不合理,可能会导致请求处理失败。例如,线程池大小设置过小,无法处理大量并发请求,就会导致请求积压和超时。 - **版本不兼容**:如果客户端与 Elasticsearch 服务端的版本不兼容,也可能会出现请求错误。不同版本的 Elasticsearch 可能有不同的 API 接口和协议,不兼容的版本可能会导致请求无法正确解析。 ### 代码示例 以下是一个简单的 Java 代码示例,用于捕获并处理 Elasticsearch 请求异常: ```java import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.indices.GetIndexRequest; import org.elasticsearch.client.indices.GetIndexResponse; import java.io.IOException; public class ElasticsearchRequestExample { public static void main(String[] args) { RestHighLevelClient client = new RestHighLevelClient(/* 配置客户端 */); try { GetIndexRequest request = new GetIndexRequest("your_index_name"); GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT); // 处理响应 } catch (IOException e) { if (e.getCause() instanceof RuntimeException) { System.err.println("Error while performing request: " + e.getMessage()); } e.printStackTrace(); } finally { try { client.close(); } catch (IOException e) { e.printStackTrace(); } } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值