使用 API 管理数据
了解如何使用 API 在 Elasticsearch 集群中索引、更新、检索、搜索和删除文档。
如果您正在寻找用于 Elasticsearch 和您数据的用户界面,请前往 Kibana!Kibana 不仅有强大的可视化和索引管理工具,还包含真实的示例数据集供您使用,以便您了解可以使用数据进行哪些操作。
在 Cloud UI 中新集群的 Overview(概览) 页面上,复制 Endpoints(端点) 下的 Elasticsearch 端点 URL。
这些示例使用 elastic 用户。如果您没有记下 elastic 用户的密码,可以 重置密码。
要使用这些示例,您还需要安装 curl 命令。
要将文档索引到 Elasticsearch 中,请 POST 您的文档
curl -u USER:PASSWORD https://<ELASTICSEARCH_URL>/my_index/_doc -XPOST -H 'Content-Type: application/json' -d '{
"title": "One", "tags": ["ruby"]
}'
为表明操作成功,Elasticsearch 会返回一个类似这样的 JSON 响应:{"_index":"my_index","_type":"_doc","_id":"0KNPhW4BnhCSymaq_3SI","_version":1,"result":"created","_shards":{"total":2,"successful":2,"failed":0},"_seq_no":0,"_primary_term":1}。
在此示例中,当第一个文档插入到索引 my_index 时,该索引会被动态创建。Elasticsearch 中的所有文档都有一个 type 和一个 id,在 JSON 响应中表现为 "_type":"_doc" 和 _id":"0KNPhW4BnhCSymaq_3SI。如果在索引过程中未指定 ID,则会生成一个随机 id。
为获得最佳性能,请使用 bulk API。
使用 bulk API 索引其他一些文档
curl -u USER:PASSWORD https://<ELASTICSEARCH_URL>/my_index/_doc/_bulk -XPOST -H 'Content-Type: application/json' -d '
{"index": {}}
{"title": "Two", "tags": ["ruby", "python"] }
{"index": {}}
{"title": "Three", "tags": ["java"] }
{"index": {}}
{"title": "Four", "tags": ["ruby", "php"] }
'
Elasticsearch 会返回一个类似这样的 JSON 响应
{"took":694,"errors":false,"items":[{"index":{"_index":"my_index","_type":"_doc","_id":"0aNqhW4BnhCSymaqFHQn","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1,"status":201}},{"index":{"_index":"my_index","_type":"_doc","_id":"0qNqhW4BnhCSymaqFHQn","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1,"status":201}},{"index":{"_index":"my_index","_type":"_doc","_id":"06NqhW4BnhCSymaqFHQn","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":2,"_primary_term":1,"status":201}}]}
要更新 Elasticsearch 中的现有文档,请将更新后的文档 POST 到 http://ELASTICSEARCH_URL/my_index/_doc/ID,其中 ID 是该文档的 _id。
例如,要更新上一个示例中索引的最后一个文档(其 "_id":"06NqhW4BnhCSymaqFHQn")
curl -u USER:PASSWORD https://<ELASTICSEARCH_URL>/my_index/_doc/06NqhW4BnhCSymaqFHQn -XPOST -H 'Content-Type: application/json' -d '{
"title": "Four updated", "tags": ["ruby", "php", "python"]
}'
JSON 响应显示文档的版本计数器已递增至 _version":2,以反映此次更新。
要查看您索引的特定文档,这里是我们使用 ID 0KNPhW4BnhCSymaq_3SI 更新的最后一个文档
curl -u USER:PASSWORD https://<ELASTICSEARCH_URL>/my_index/_doc/06NqhW4BnhCSymaqFHQn
此请求未包含 GET,因为如果您未指定其他内容,则默认使用该方法。如果您查找的文档存在,Elasticsearch 会返回 found":true 以及作为 JSON 响应一部分的文档。否则,JSON 响应将包含 "found":false。
您可以使用以下任一 Elasticsearch 端点发出文档搜索请求
https://<ELASTICSEARCH_URL>/_search
https://<ELASTICSEARCH_URL>/INDEX_NAME/_search
使用带有某些 URI 搜索参数的 GET 或 POST 请求均可,或者省略方法以默认使用 GET 请求
curl -u USER:PASSWORD https://<ELASTICSEARCH_URL>/my_index/_doc/_search?q=title:T*
有关允许参数的说明,请查看 URI Search。
要使 Elasticsearch 返回更易于阅读的 JSON 响应,请在请求中添加 ?pretty=true
curl -u USER:PASSWORD https://<ELASTICSEARCH_URL>/my_index/_doc/_search?pretty=true -H 'Content-Type: application/json' -d '{
"query": {
"query_string": {"query": "*"}
}
}'
出于性能考虑,不建议在生产环境中使用 ?pretty=true。您可以自行检查 JSON 响应中的 took 字段来验证性能差异,该字段会告诉您 Elasticsearch 评估搜索所花费的时间(以毫秒为单位)。当我们自己测试这些示例时,差异为 "took" : 4 对比 "took" : 18,这是一个相当大的差异。
有关请求体结构如何构成的完整说明,请查看 Elasticsearch 请求体文档。您还可以使用 Multi Search API 在一个请求中执行多个查询。
您可以通过发送 DELETE 请求从 Elasticsearch 中删除文档。
要从之前的示例中按 ID 删除单个文档
curl -u USER:PASSWORD https://<ELASTICSEARCH_URL>/my_index/_doc/06NqhW4BnhCSymaqFHQn -XDELETE
要删除整个索引,这里是 my_index
curl -u USER:PASSWORD https://<ELASTICSEARCH_URL>/my_index -XDELETE
JSON 响应返回 {"acknowledged":true} 以表明索引删除成功。