在 Amazon Elasticsearch Service 中为数据建立索引 - Amazon Elasticsearch Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Amazon Elasticsearch Service 中为数据建立索引

由于 Amazon Elasticsearch Service (Amazon ES) 使用的是 REST API,因此可通过多种方法为文档建立索引。您可以使用标准客户端 (如 curl) 或可发送 HTTP 请求的任何编程语言。为了进一步简化与之交互的过程,Amazon Es 拥有了适用于多种编程语言的客户端。高级用户可以直接跳转至 向 Amazon Elasticsearch Service 签名 HTTP 请求将流式数据加载到 Amazon Elasticsearch Service

有关建立索引的简介,请参阅 Open Distro for Elasticsearch 文档

索引的命名限制

Amazon EES 索引具有以下命名限制:

  • 所有字母必须为小写形式。

  • 索引名称不能以 _- 开头。

  • 索引名称不能包含空格、逗号、:"*+/\|?#>,或者<

请勿在索引、类型或文档 ID 名称中包含敏感信息。Amazon Es 会在其统一资源标识符 (URI) 中使用这些名称。服务器和应用程序通常会记录 HTTP 请求,从而会在 URI 包含敏感信息的情况下可能会导致不必要的数据泄露:

2018-10-03T23:39:43 198.51.100.14 200 "GET https://elasticsearch_domain/dr-jane-doe/flu-patients-2018/202-555-0100/ HTTP/1.1"

即使您没有权限查看关联的 JSON 文档,您可以从这个假日志行中推断出来,其中一位电话号码为 202-555-0100 的患者在 2018 年患过流感” 这一伪造日志行中推断出来。

减小响应大小

来自 _index_bulk API 的响应包含相当多的信息。此信息可用于对请求进行问题排查或实施重试逻辑,但可使用大量带宽。在本示例中,对 32 字节文档编制索引会生成 339 字节响应(包括标头):

PUT elasticsearch_domain/more-movies/_doc/1 {"title": "Back to the Future"}

响应

{ "_index": "more-movies", "_type": "_doc", "_id": "1", "_version": 4, "result": "updated", "_shards": { "total": 2, "successful": 2, "failed": 0 }, "_seq_no": 3, "_primary_term": 1 }

此响应大小可能看起来很小,但如果您每天索引 1,000,000 个文档(大约每秒 11.5 个文档),则每个响应 339 字节的下载流量为每月 10.17 GB。

如果数据传输成本是一个问题,请使用filter_path参数来减小 Amazon EES 响应的大小,但请小心,不要筛掉标识或重试失败请求所需的字段。这些字段会因客户端而异。这些区域有:filter_path参数适用于所有 Amazon EES REST API,但尤其适用于您经常调用的 API,例如_index_bulkAPI:

PUT elasticsearch_domain/more-movies/_doc/1?filter_path=result,_shards.total {"title": "Back to the Future"}

响应

{ "result": "updated", "_shards": { "total": 2 } }

不同于包括字段,您可以使用-前缀. filter_path也支持通配符:

POST elasticsearch_domain/_bulk?filter_path=-took,-items.index._* { "index": { "_index": "more-movies", "_id": "1" } } {"title": "Back to the Future"} { "index": { "_index": "more-movies", "_id": "2" } } {"title": "Spirited Away"}

响应

{ "errors": false, "items": [ { "index": { "result": "updated", "status": 200 } }, { "index": { "result": "updated", "status": 200 } } ] }