本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为亚马逊中的数据编制索引OpenSearch服务
因为亚马逊OpenSearch服务使用 REST API,有许多用于索引文档的方法。您可以使用标准客户端 (如 curl
我们强烈建议您使用亚马逊OpenSearch采集到采集数据,这是内置的完全托管的数据收集器OpenSearch服务。有关更多信息,请参见亚马逊OpenSearch摄入。
有关索引的简介,请参见OpenSearch文档
索引的命名限制
OpenSearch服务索引有以下命名限制:
-
所有字母必须为小写形式。
-
索引名称不能以
_
或-
开头。 -
索引名称不能包含空格、逗号、
:
、"
、*
、+
、/
、\
、|
、?
、#
、>
或<
。
请勿在索引、类型或文档 ID 名称中包含敏感信息。OpenSearch服务在其统一资源标识符 (URI) 中使用这些名称。服务器和应用程序通常会记录 HTTP 请求,从而会在 URI 包含敏感信息的情况下可能会导致不必要的数据泄露:
2018-10-03T23:39:43 198.51.100.14 200 "GET https://
opensearch-domain
/dr-jane-doe/flu-patients-2018/202-555-0100/ HTTP/1.1"
即使您没有查看关联的 JSON 文档的权限,您可以从这条假的日志线推断,Doe 医生的一个电话号码为 202-555-0100 的患者在 2018 年患了流感。
如果OpenSearch服务在索引名称中检测真实或感知的 IP 地址(例如,my-index-12.34.56.78.91
),它会掩盖 IP 地址。调用 _cat/indices
会产生以下响应:
green open my-index-x.x.x.x.91 soY19tBERoKo71WcEScidw 5 1 0 0 2kb 1kb
为避免不必要的混淆,请避免在索引名称中包括 IP 地址。
减小响应大小
来自 _index
和 _bulk
API 的响应包含相当多的信息。此信息可用于对请求进行问题排查或实施重试逻辑,但可使用大量带宽。在本示例中,对 32 字节文档编制索引会生成 339 字节响应(包括标头):
PUT
opensearch-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
用于减小大小的参数OpenSearch服务响应,但请注意不要筛选出识别或重试失败请求所需的字段。这些字段会因客户端而异。该filter_path
参数适用于所有人OpenSearch服务 REST API,但对于经常调用的 API 尤其有用,例如_index
和_bulk
API:
PUT
opensearch-domain
/more-movies/_doc/1?filter_path=result,_shards.total {"title": "Back to the Future"}
响应
{ "result": "updated", "_shards": { "total": 2 } }
不同于包括字段,您可以使用 -
前缀排除字段。filter_path
还支持通配符:
POST
opensearch-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 } } ] }