

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

# 在 Amazon OpenSearch 服务中为数据编制索引
<a name="indexing"></a>

由于亚马逊 OpenSearch 服务使用 REST API，因此有许多方法可以为文档编制索引。您可以使用标准客户端 (如 [curl](https://curl.haxx.se/)) 或可发送 HTTP 请求的任何编程语言。为了进一步简化与之交互的过程，S OpenSearch ervice 提供了多种编程语言的客户端。高级用户可以直接跳至[将流数据加载到 Amazon OpenSearch 服务](integrations.md)。

我们强烈建议您使用 Amazon OpenSearch Ingestion 来摄取数据，这是在服务中内置的完全托管的数据收集器。 OpenSearch 有关更多信息，请参阅 [Amazon OpenSearch Ingesti](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ingestion.html) on。

有关索引的简介，请参阅[OpenSearch文档](https://docs.opensearch.org/latest/opensearch/index-data/)。

## 索引的命名限制
<a name="indexing-naming"></a>

OpenSearch 服务索引有以下命名限制：
+ 所有字母必须为小写形式。
+ 索引名称不能以 `_` 或 `-` 开头。
+ 索引名称不能包含空格、逗号、`:`、`"`、`*`、`+`、`/`、`\`、`|`、`?`、`#`、`>` 或 `<`。

不要在索引、类型或文档 ID 名称中包含敏感信息。 OpenSearch 服务在其统一资源标识符 (URIs) 中使用这些名称。服务器和应用程序经常记录 HTTP 请求，如果 URIs 包含敏感信息，可能会导致不必要的数据泄露：

```
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 文档的[权限](ac.md)，您可以从这条假的日志线推断，Doe 医生的一个电话号码为 202-555-0100 的患者在 2018 年患了流感。

如果 Ser OpenSearch vice 在索引名称中检测到真实或感知的 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 地址。

## 减小响应大小
<a name="indexing-size"></a>

来自`_index`和的回复`_bulk` APIs 包含大量信息。此信息可用于对请求进行问题排查或实施重试逻辑，但可使用大量带宽。在本示例中，对 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`参数适用于所有 Service REST APIs，但对于经常调用的 OpenSearch 服务特别有用，例如`_index`和 `_bulk` APIs： APIs 

```
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
      }
    }
  ]
}
```

## 索引编解码器
<a name="indexing-codecs"></a>

索引编解码器决定如何压缩索引上存储的字段并将其存储在磁盘上。索引编解码器由静态 `index.codec` 设置控制，静态设置指定压缩算法。此设置会影响索引分片大小和操作性能。

有关支持的编解码器及其性能特性的列表，请参阅文档中的[支持的编解码器。](https://opensearch.org/docs/latest/im-plugin/index-codecs/#supported-codecs) OpenSearch 

在选择索引编解码器时，请注意以下事项：
+ 为避免更改现有索引的编解码器设置所带来的难题，请在使用新的编解码器设置之前，在非生产环境中测试具有代表性的工作负载。有关更多信息，请参阅[更改索引编解码器](https://opensearch.org/docs/latest/im-plugin/index-codecs/#changing-an-index-codec)。
+ 不能将 [Zstandard 压缩编解码器](https://opensearch.org/docs/latest/im-plugin/index-codecs/)（`"index.codec": "zstd"` 或 `"index.codec": "zstd_no_dict"`）用于 [k-NN](https://opensearch.org/docs/latest/search-plugins/knn/index/) 或[安全分析](https://opensearch.org/docs/latest/security-analytics/index/)索引。