

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

# 自定义数据来源连接器
<a name="data-source-custom"></a>

如果 Amazon Kendra 没有为您的存储库提供数据来源连接器，请使用自定义数据来源。即使您无法使用 Amazon Kendra 数据来源同步存储库，也可以使用 Amazon Kendra 来查看数据来源提供的相同运行历史指标。使用它可以在 Amazon Kendra 数据来源和自定义数据来源之间创建一致的同步监控体验。具体而言，使用自定义数据来源来查看您使用 [BatchPutDocument](https://docs.aws.amazon.com/kendra/latest/APIReference/API_BatchPutDocument.html) 和 [BatchDeleteDocument](https://docs.aws.amazon.com/kendra/latest/APIReference/API_BatchDeleteDocument.html) API 创建的数据来源连接器的同步指标。

要对 Amazon Kendra 数据来源连接器进行故障排除，请参阅[数据来源故障排除](troubleshooting-data-sources.md)。

创建自定义数据来源时，您可以完全控制要编制索引的文档的选择方式。Amazon Kendra 仅提供可用于监控 DATA SOLOG SYNC 作业的指标信息。您必须创建并运行用于确定数据来源索引文档的爬网程序。

您必须使用 [Document](https://docs.aws.amazon.com/kendra/latest/APIReference/API_Document.html) 对象，以及 [DocumentAttribute](https://docs.aws.amazon.com/kendra/latest/APIReference/API_DocumentAttribute.html) 中的 `_source_uri` 指定文档的主标题，从而将 `DocumentTitle` 和 `DocumentURI` 包含在 `Query` 结果的响应中。

您可以使用控制台或使用 [CreateDataSource](https://docs.aws.amazon.com/kendra/latest/APIReference/API_CreateDataSource.html) API 为自定义数据来源创建标识符。要使用控制台，请为您的数据来源命名，并可选择提供描述和资源标签。创建数据来源后，将显示数据来源 ID。复制此 ID，以便在将数据来源与索引同步时使用。

![\[Form for specifying data source details, including name, description, and optional tags.\]](http://docs.aws.amazon.com/zh_cn/kendra/latest/dg/images/CustomDataSource.png)


您还可以使用 `CreateDataSource` API 创建自定义数据来源。API 会返回一个 ID，供您在同步数据来源时使用。使用 `CreateDataSource` API 创建自定义数据来源时，无法设置 `Configuration`、`RoleArn` 或 `Schedule` 参数。如果您设置了这些参数，则 Amazon Kendra 会返回 `ValidationException` 异常。

要使用自定义数据来源，请创建一个负责更新 Amazon Kendra 索引的应用程序。该应用程序依赖于您创建的爬网程序。爬网程序会读取存储库中的文档并确定应将哪些文档发送到 Amazon Kendra。您的应用程序应执行以下步骤：

1. 爬取您的存储库，列出存储库中添加、更新或删除的文档。

1. 调用 [StartDataSourceSyncJob](https://docs.aws.amazon.com/kendra/latest/APIReference/API_StartDataSourceSyncJob.html) API 发出同步作业正在启动的信号。您需要提供一个数据来源 ID 来标识正在同步的数据来源。Amazon Kendra 会返回用于标识特定同步任务的执行 ID。

1. 调用 [BatchDeleteDocument](https://docs.aws.amazon.com/kendra/latest/APIReference/API_BatchDeleteDocument.html) API 从索引中删除文档。您可以提供数据来源 ID 和执行 ID 来标识正在同步的数据来源以及与此更新关联的作业。

1. 调用 [StopDataSourceSyncJob API](https://docs.aws.amazon.com/kendra/latest/APIReference/API_StopDataSourceSyncJob.html) 发出同步任务结束的信号。调用 `StopDataSourceSyncJob` API 后，关联的执行 ID 不再有效。

1. 使用索引调用 [ListDataSourceSyncJobs](https://docs.aws.amazon.com/kendra/latest/APIReference/API_ListDataSourceSyncJobs.html) API，列出数据来源的同步任务并查看同步作业的指标。

结束同步作业后，您可以开始新的同步作业。可能需要一段时间才能将所有提交的文档添加到索引中。使用 `ListDataSourceSyncJobs` API 查看同步任务的状态。如果同步作业返回的 `Status` 为 `SYNCING_INDEXING`，则某些文档仍在编制索引。当上一个作业的状态为 `FAILED` 或 `SUCCEEDED` 时，您可以启动新的同步作业。

调用 `StopDataSourceSyncJob` API 后，您不能在调用 `BatchPutDocument` 或 `BatchDeleteDocument` API 时使用同步任务标识符。如果您这样做，则提交的所有文档都将在 API 的 `FailedDocuments` 响应消息中返回。

## 必需的属性
<a name="custom-required-attributes"></a>

当您使用 `BatchPutDocument` API 向 Amazon Kendra 提交文档时，每个文档都需要两个属性来标识其所属的数据来源和同步运行。要将自定义数据来源的文档正确映射到 Amazon Kendra 索引，您必须提供以下两个属性：
+ `_data_source_id` - 数据来源的标识符。当您使用控制台或 `CreateDataSource` API 创建数据来源时，会返回此值。
+ `_data_source_sync_job_execution_id` - 同步运行的标识符。当您开始与 `StartDataSourceSyncJob` API 进行索引同步时，会返回该值。

以下是使用自定义数据来源为文档编制索引所需的 JSON。

```
{
    "Documents": [
        {
            "Attributes": [
                {
                    "Key": "_data_source_id",
                    "Value": {
                        "StringValue": "data source identifier"
                    }
                },
                {
                    "Key": "_data_source_sync_job_execution_id",
                    "Value": {
                        "StringValue": "sync job identifier"
                    }
                }
            ],
            "Blob": "document content",
            "ContentType": "content type",
            "Id": "document identifier",
            "Title": "document title"
        }
    ],
    "IndexId": "index identifier",
    "RoleArn": "IAM role ARN"
}
```

使用 `BatchDeleteDocument` API 从索引中移除文档时，需要在 `DataSourceSyncJobMetricTarget` 参数中指定以下两个字段：
+ `DataSourceId` - 数据来源的标识符。当您使用控制台或 `CreateDataSource` API 创建数据来源时，会返回此值。
+ `DataSourceSyncJobId` - 同步运行的标识符。当您开始与 `StartDataSourceSyncJob` API 进行索引同步时，会返回该值。

以下是使用 `BatchDeleteDocument` API 从索引中删除文档所需的 JSON。

```
{
    "DataSourceSyncJobMetricTarget": {
        "DataSourceId": "data source identifier",
        "DataSourceSyncJobId": "sync job identifier"
    },
    "DocumentIdList": [
        "document identifier"
    ],
    "IndexId": "index identifier"
}
```

## 查看指标
<a name="custom-metrics"></a>

同步任务完成后，您可以使用 [DataSourceSyncJobMetrics](https://docs.aws.amazon.com/kendra/latest/APIReference/API_DataSourceSyncJobMetrics.html) API 来获取与同步任务相关的指标。使用它来监控您的自定义数据来源同步。

如果您多次提交同一个文档，无论是作为 `BatchPutDocument` API、`BatchDeleteDocument` API 的一部分，还是为添加和删除提交该文档，该文档在指标中仅计入一次。
+ `DocumentsAdded` - 使用与首次添加到索引中的此同步作业关联的 `BatchPutDocument` API 提交的文档数量。如果在同步中为添加多次提交文档，则该文档在指标中仅计入一次。
+ `DocumentsDeleted` - 使用与从索引中删除的此同步作业关联的 `BatchDeleteDocument` API 提交的文档数量。如果在同步中为删除多次提交文档，则该文档在指标中仅计入一次。
+ `DocumentsFailed` - 与该同步作业关联但编制索引失败的文档数量。Amazon Kendra 已接受为这些文档编制索引，但无法编制索引或已删除。如果 Amazon Kendra 未接受某个文档，则该文档的标识符将在 `BatchPutDocument` 和 `BatchDeleteDocument` API 的 `FailedDocuments` 响应属性中返回。
+ `DocumentsModified` - 使用与在 Amazon Kendra 索引中修改的此同步作业关联的 `BatchPutDocument` API 提交的已修改文档的数量。

Amazon Kendra 在为文档编制索引时也会发出 Amazon CloudWatch 指标。有关更多信息，请参阅[使用 Amazon CloudWatch 监控 Amazon Kendra](https://docs.aws.amazon.com/kendra/latest/dg/cloudwatch-metrics.html)。

Amazon Kendra 不返回自定义数据来源的 `DocumentsScanned` 指标。它还会发出文档[Amazon Kendra 数据来源的指标](https://docs.aws.amazon.com/kendra/latest/dg/cloudwatch-metrics.html#cloudwatch-metrics-data-source)中列出的 CloudWatch 指标。

## 了解更多
<a name="custom-learn-more"></a>

要了解有关将 Amazon Kendra 与自定义数据来源集成的更多信息，请参阅：
+ [将自定义数据来源添加到 Amazon Kendra](https://aws.amazon.com/blogs/machine-learning/adding-custom-data-sources-to-amazon-kendra/)