

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

# 自定义数据来源连接器
<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 仅提供可用于监控数据源同步作业的指标信息。您必须创建并运行用于确定数据来源索引文档的爬网程序。

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

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

![用于指定数据源详细信息的表单，包括名称、描述和可选标签。](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](https://docs.aws.amazon.com/kendra/latest/APIReference/API_StopDataSourceSyncJob.html)API 以发出同步任务结束的信号。调用 `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>

当您 Amazon Kendra 使用 `BatchPutDocument` API 向提交文档时，每个文档都需要两个属性来标识其所属的数据源和同步运行。要将自定义数据来源的文档正确映射到 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`— 使用与此同步作业关联的 `BatchPutDocument` API 提交的已修改文档的数量，这些文档已在 Amazon Kendra 索引中进行了修改。

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

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

## 了解详情
<a name="custom-learn-more"></a>

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