

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Benutzerdefinierter Datenquellen-Connector
<a name="data-source-custom"></a>

Verwenden Sie eine benutzerdefinierte Datenquelle, wenn Sie über ein Repository verfügen, für das noch Amazon Kendra kein Datenquellen-Connector zur Verfügung steht. Sie können damit dieselben Metriken zum Ausführungsverlauf anzeigen, die Amazon Kendra Datenquellen bereitstellen, auch wenn Sie die Datenquellen nicht zum Synchronisieren Ihrer Amazon Kendra Repositorys verwenden können. Verwenden Sie dies, um eine konsistente Synchronisierungsüberwachung zwischen Amazon Kendra Datenquellen und benutzerdefinierten Datenquellen zu gewährleisten. Verwenden Sie insbesondere eine benutzerdefinierte Datenquelle, um Synchronisierungsmetriken für einen Datenquellenconnector anzuzeigen, den Sie mit [BatchPutDocument](https://docs.aws.amazon.com/kendra/latest/APIReference/API_BatchPutDocument.html)und erstellt haben [BatchDeleteDocument](https://docs.aws.amazon.com/kendra/latest/APIReference/API_BatchDeleteDocument.html) APIs.

Informationen zur Fehlerbehebung bei Ihrem benutzerdefinierten Amazon Kendra-Datenquellen-Connector finden Sie unter[Problembehandlung bei Datenquellen](troubleshooting-data-sources.md).

Wenn Sie eine benutzerdefinierte Datenquelle erstellen, haben Sie die vollständige Kontrolle darüber, wie die zu indizierenden Dokumente ausgewählt werden. Amazon Kendra stellt nur Metrikinformationen bereit, die Sie zur Überwachung Ihrer Datenquellen-Synchronisierungsaufträge verwenden können. Sie müssen den Crawler erstellen und ausführen, der bestimmt, welche Dokumente Ihre Datenquelle indexiert.

Sie müssen den Haupttitel Ihrer Dokumente mithilfe des [Document-Objekts](https://docs.aws.amazon.com/kendra/latest/APIReference/API_Document.html) angeben, um das Ergebnis zu erhalten `DocumentTitle` und `DocumentURI` in die Antwort aufzunehmen. `_source_uri` [DocumentAttribute](https://docs.aws.amazon.com/kendra/latest/APIReference/API_DocumentAttribute.html)`Query`

Sie erstellen einen Bezeichner für Ihre benutzerdefinierte Datenquelle mithilfe der Konsole oder mithilfe der [CreateDataSource](https://docs.aws.amazon.com/kendra/latest/APIReference/API_CreateDataSource.html)API. Um die Konsole zu verwenden, geben Sie Ihrer Datenquelle einen Namen und optional eine Beschreibung und Ressourcen-Tags. Nachdem die Datenquelle erstellt wurde, wird eine Datenquellen-ID angezeigt. Kopieren Sie diese ID, um sie zu verwenden, wenn Sie die Datenquelle mit dem Index synchronisieren.

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


Sie können mithilfe der `CreateDataSource` API auch eine benutzerdefinierte Datenquelle erstellen. Die API gibt eine ID zurück, die Sie verwenden können, wenn Sie die Datenquelle synchronisieren. Wenn Sie die `CreateDataSource` API verwenden, um eine benutzerdefinierte Datenquelle zu erstellen, können Sie die `Configuration` `Schedule` Parameter `RoleArn` oder nicht festlegen. Wenn Sie diese Parameter festlegen, wird eine `ValidationException` Ausnahme Amazon Kendra zurückgegeben.

Um eine benutzerdefinierte Datenquelle zu verwenden, erstellen Sie eine Anwendung, die für die Aktualisierung des Amazon Kendra Index verantwortlich ist. Die Anwendung hängt von einem Crawler ab, den Sie erstellen. Der Crawler liest die Dokumente in Ihrem Repository und bestimmt, an welche Dokumente gesendet werden sollen. Amazon Kendra Ihre Anwendung sollte die folgenden Schritte ausführen: 

1. Durchforsten Sie Ihr Repository und erstellen Sie eine Liste der Dokumente in Ihrem Repository, die hinzugefügt, aktualisiert oder gelöscht wurden.

1. Rufen Sie die [StartDataSourceSyncJob](https://docs.aws.amazon.com/kendra/latest/APIReference/API_StartDataSourceSyncJob.html)API auf, um zu signalisieren, dass ein Synchronisierungsjob gestartet wird. Sie geben eine Datenquellen-ID an, um die Datenquelle zu identifizieren, die synchronisiert wird. Amazon Kendra gibt eine Ausführungs-ID zurück, um einen bestimmten Synchronisierungsjob zu identifizieren.

1. Rufen Sie die [BatchDeleteDocument](https://docs.aws.amazon.com/kendra/latest/APIReference/API_BatchDeleteDocument.html)API auf, um Dokumente aus dem Index zu entfernen. Sie geben die Datenquellen-ID und die Ausführungs-ID an, um die Datenquelle zu identifizieren, die synchronisiert wird, und den Job, dem dieses Update zugeordnet ist.

1. Rufen Sie die [StopDataSourceSyncJob](https://docs.aws.amazon.com/kendra/latest/APIReference/API_StopDataSourceSyncJob.html)API auf, um das Ende des Synchronisierungsauftrags zu signalisieren. Nachdem Sie die `StopDataSourceSyncJob` API aufgerufen haben, ist die zugehörige Ausführungs-ID nicht mehr gültig.

1. Rufen Sie die [ListDataSourceSyncJobs](https://docs.aws.amazon.com/kendra/latest/APIReference/API_ListDataSourceSyncJobs.html)API mit den Index- und Datenquellen-IDs auf, um die Synchronisierungsjobs für die Datenquelle aufzulisten und die Metriken für die Synchronisierungsjobs anzuzeigen.

Nachdem Sie einen Synchronisierungsjob beendet haben, können Sie einen neuen Synchronisierungsjob starten. Es kann eine gewisse Zeit dauern, bis alle eingereichten Dokumente dem Index hinzugefügt werden. Verwenden Sie die `ListDataSourceSyncJobs` API, um den Status des Synchronisierungsauftrags zu sehen. Wenn der für den Synchronisierungsjob `Status` zurückgegebene Wert lautet`SYNCING_INDEXING`, werden einige Dokumente noch indexiert. Sie können einen neuen Synchronisierungsauftrag starten, wenn der Status des vorherigen Jobs `FAILED` oder `SUCCEEDED` lautet.

Nachdem Sie die `StopDataSourceSyncJob` API aufgerufen haben, können Sie in einem Aufruf von `BatchPutDocument` oder keine Synchronisierungsauftrags-ID verwenden `BatchDeleteDocument` APIs. Wenn Sie dies tun, werden alle eingereichten Dokumente in der `FailedDocuments` Antwortnachricht der API zurückgegeben.

## Erforderliche Attribute
<a name="custom-required-attributes"></a>

Wenn Sie ein Dokument Amazon Kendra über die `BatchPutDocument` API einreichen, benötigt jedes Dokument zwei Attribute, um die Datenquelle und den Synchronisierungslauf zu identifizieren, zu dem es gehört. Sie müssen die folgenden beiden Attribute angeben, um Dokumente aus Ihrer benutzerdefinierten Datenquelle korrekt einem Amazon Kendra Index zuzuordnen:
+ `_data_source_id`— Der Bezeichner der Datenquelle. Dieser Wert wird zurückgegeben, wenn Sie die Datenquelle mit der Konsole oder der `CreateDataSource` API erstellen.
+ `_data_source_sync_job_execution_id`— Der Bezeichner des Synchronisierungslaufs. Dies wird zurückgegeben, wenn Sie die Indexsynchronisierung mit der `StartDataSourceSyncJob` API starten.

Im Folgenden finden Sie die JSON-Daten, die für die Indexierung eines Dokuments mithilfe einer benutzerdefinierten Datenquelle erforderlich sind.

```
{
    "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"
}
```

Wenn Sie ein Dokument mithilfe der `BatchDeleteDocument` API aus dem Index entfernen, müssen Sie die folgenden beiden Felder im `DataSourceSyncJobMetricTarget` Parameter angeben:
+ `DataSourceId`— Der Bezeichner der Datenquelle. Dieser Wert wird zurückgegeben, wenn Sie die Datenquelle mit der Konsole oder der `CreateDataSource` API erstellen.
+ `DataSourceSyncJobId`— Der Bezeichner des Synchronisierungslaufs. Dies wird zurückgegeben, wenn Sie die Indexsynchronisierung mit der `StartDataSourceSyncJob` API starten.

Das Folgende ist das JSON, das erforderlich ist, um ein Dokument mithilfe der `BatchDeleteDocument` API aus dem Index zu löschen.

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

## Anzeigen von -Metriken
<a name="custom-metrics"></a>

Nach Abschluss eines Synchronisierungsauftrags können Sie die [DataSourceSyncJobMetrics](https://docs.aws.amazon.com/kendra/latest/APIReference/API_DataSourceSyncJobMetrics.html)API verwenden, um die mit dem Synchronisierungsjob verknüpften Metriken abzurufen. Verwenden Sie dies, um Ihre benutzerdefinierten Datenquellensynchronisierungen zu überwachen.

Wenn Sie dasselbe Dokument mehrmals einreichen, entweder als Teil der `BatchPutDocument` API, der API oder wenn das `BatchDeleteDocument` Dokument sowohl zum Hinzufügen als auch zum Löschen eingereicht wird, wird das Dokument in den Kennzahlen nur einmal gezählt.
+ `DocumentsAdded`— Die Anzahl der Dokumente, die über die `BatchPutDocument` API eingereicht wurden, die mit diesem Synchronisierungsjob verknüpft ist, wurde dem Index zum ersten Mal hinzugefügt. Wenn ein Dokument mehr als einmal synchron zur Hinzufügung eingereicht wird, wird das Dokument in den Kennzahlen nur einmal gezählt.
+ `DocumentsDeleted`— Die Anzahl der Dokumente, die über die `BatchDeleteDocument` API eingereicht wurden, die mit diesem Synchronisierungsauftrag verknüpft ist, wurde aus dem Index gelöscht. Wenn ein Dokument bei einer Synchronisation mehr als einmal zum Löschen eingereicht wird, wird das Dokument in den Kennzahlen nur einmal gezählt.
+ `DocumentsFailed`— Die Anzahl der Dokumente, die mit diesem Synchronisierungsauftrag verknüpft sind und bei dem die Indizierung fehlgeschlagen ist. Dies sind Dokumente, die von Amazon Kendra zur Indizierung akzeptiert wurden, aber nicht indexiert oder gelöscht werden konnten. Wenn ein Dokument von nicht akzeptiert wird Amazon Kendra, wird der Bezeichner für das Dokument in der `FailedDocuments` Antworteigenschaft von and zurückgegeben. `BatchPutDocument` `BatchDeleteDocument` APIs
+ `DocumentsModified`— Die Anzahl der geänderten Dokumente, die über die diesem Synchronisierungsauftrag zugeordnete `BatchPutDocument` API übermittelt wurden und die im Amazon Kendra Index geändert wurden.

Amazon Kendra gibt bei der Indizierung von Dokumenten auch Amazon CloudWatch Metriken aus. Weitere Informationen finden Sie unter [Überwachung Amazon Kendra](https://docs.aws.amazon.com/kendra/latest/dg/cloudwatch-metrics.html) mit. Amazon CloudWatch

Amazon Kendra gibt die `DocumentsScanned` Metrik für benutzerdefinierte Datenquellen nicht zurück. Es gibt auch die im Dokument CloudWatch Metriken [für Amazon Kendra Datenquellen aufgeführten Metriken](https://docs.aws.amazon.com/kendra/latest/dg/cloudwatch-metrics.html#cloudwatch-metrics-data-source) aus.

## Weitere Informationen
<a name="custom-learn-more"></a>

Weitere Informationen zur Integration Amazon Kendra mit Ihrer benutzerdefinierten Datenquelle finden Sie unter:
+ [Hinzufügen von benutzerdefinierten Datenquellen zu Amazon Kendra](https://aws.amazon.com/blogs/machine-learning/adding-custom-data-sources-to-amazon-kendra/)

# Benutzerdefinierte Datenquelle (Java)
<a name="custom-java-sample"></a>

Der folgende Code enthält eine Beispielimplementierung einer benutzerdefinierten Datenquelle mit Java. Das Programm erstellt zunächst eine benutzerdefinierte Datenquelle und synchronisiert dann neu hinzugefügte Dokumente mit der benutzerdefinierten Datenquelle zum Index.

Der folgende Code veranschaulicht das Erstellen und Verwenden einer benutzerdefinierten Datenquelle. Wenn Sie in Ihrer Anwendung eine benutzerdefinierte Datenquelle verwenden, müssen Sie nicht jedes Mal, wenn Sie Ihren Index mit Ihrer Datenquelle synchronisieren, eine neue Datenquelle erstellen (einmaliger Vorgang). Sie verwenden die Index-ID und die Datenquellen-ID, um Ihre Daten zu synchronisieren.

```
package com.amazonaws.kendra;

import java.util.concurrent.TimeUnit;
import software.amazon.awssdk.services.kendra.KendraClient;
import csoftware.amazon.awssdk.services.kendra.model.BatchPutDocumentRequest;
import csoftware.amazon.awssdk.services.kendra.model.BatchPutDocumentResponse;
import software.amazon.awssdk.services.kendra.model.CreateDataSourceRequest;
import software.amazon.awssdk.services.kendra.model.CreateDataSourceResponse;
import software.amazon.awssdk.services.kendra.model.DataSourceType;
import software.amazon.awssdk.services.kendra.model.Document;
import software.amazon.awssdk.services.kendra.model.ListDataSourceSyncJobsRequest;
import software.amazon.awssdk.services.kendra.model.ListDataSourceSyncJobsResponse;
import software.amazon.awssdk.services.kendra.model.StartDataSourceSyncJobRequest;
import software.amazon.awssdk.services.kendra.model.StartDataSourceSyncJobResponse;
import software.amazon.awssdk.services.kendra.model.StopDataSourceSyncJobRequest;
import software.amazon.awssdk.services.kendra.model.StopDataSourceSyncJobResponse;

public class SampleSyncForCustomDataSource {
  public static void main(String[] args) {
    KendraClient kendra = KendraClient.builder().build();

    String myIndexId = "yourIndexId";
    String dataSourceName = "custom data source";
    String dataSourceDescription = "Amazon Kendra custom data source connector"
	
    // Create custom data source
    CreateDataSourceRequest createDataSourceRequest = CreateDataSourceRequest
        .builder()
        .indexId(myIndexId)
        .name(dataSourceName)
        .description(dataSourceDescription)
        .type(DataSourceType.CUSTOM)
        .build();
    	
    CreateDataSourceResponse createDataSourceResponse = kendra.createDataSource(createDataSourceRequest);
    System.out.println(String.format("Response of creating data source: %s", createDataSourceResponse));
	
    // Get the data source ID from createDataSourceResponse
    String dataSourceId = createDataSourceResponse.Id();

    // Wait for the custom data source to become active
    System.out.println(String.format("Waiting for Amazon Kendra to create the data source %s", dataSourceId));
    // You can use the DescribeDataSource API to check the status
    DescribeDataSourceRequest describeDataSourceRequest = DescribeDataSourceRequest
        .builder()
        .indexId(myIndexId)
        .id(dataSourceId)
        .build();

    while (true) {
        DescribeDataSourceResponse describeDataSourceResponse = kendra.describeDataSource(describeDataSourceRequest);

        DataSourceStatus status = describeDataSourceResponse.status();
        System.out.println(String.format("Creating data source. Status: %s", status));
        if (status != DataSourceStatus.CREATING) {
            break;
        }
        
        TimeUnit.SECONDS.sleep(60);
    }
    
    // Start syncing yor data source by calling StartDataSourceSyncJob and providing your index ID 
    // and your custom data source ID
    System.out.println(String.format("Synchronize the data source %s", dataSourceId));
    StartDataSourceSyncJobRequest startDataSourceSyncJobRequest = StartDataSourceSyncJobRequest
        .builder()
        .indexId(myIndexId)
        .id(dataSourceId)
        .build();
    StartDataSourceSyncJobResponse startDataSourceSyncJobResponse = kendra.startDataSourceSyncJob(startDataSourceSyncJobRequest);
    
    // Get the  sync job execution ID from startDataSourceSyncJobResponse
    String executionId = startDataSourceSyncJobResponse.ExecutionId();
	System.out.println(String.format("Waiting for the data source to sync with the index %s for execution ID %s", indexId, startDataSourceSyncJobResponse.executionId()));
    
    // Add 2 documents uploaded to S3 bucket to your index using the BatchPutDocument API
    // The added documents should sync with your custom data source
    Document pollyDoc = Document
        .builder()
        .s3Path(
            S3Path.builder()
            .bucket("amzn-s3-demo-bucket")
            .key("what_is_Amazon_Polly.docx")
            .build())
        .title("What is Amazon Polly?")
        .id("polly_doc_1")
        .build();
    
    Document rekognitionDoc = Document
        .builder()
        .s3Path(
            S3Path.builder()
            .bucket("amzn-s3-demo-bucket")
            .key("what_is_amazon_rekognition.docx")
            .build())
        .title("What is Amazon rekognition?")
        .id("rekognition_doc_1")
        .build();
    
    BatchPutDocumentRequest batchPutDocumentRequest = BatchPutDocumentRequest
        .builder()
        .indexId(myIndexId)
        .documents(pollyDoc, rekognitionDoc)
        .build();
    
    BatchPutDocumentResponse result = kendra.batchPutDocument(batchPutDocumentRequest);
    System.out.println(String.format("BatchPutDocument result: %s", result));
    
    // Once custom data source synced, stop the sync job using the StopDataSourceSyncJob API
    StopDataSourceSyncJobResponse stopDataSourceSyncJobResponse = kendra.stopDataSourceSyncJob(
        StopDataSourceSyncJobRequest()
            .indexId(myIndexId)
            .id(dataSourceId)
    );
	
	// List your sync jobs
    ListDataSourceSyncJobsRequest listDataSourceSyncJobsRequest = ListDataSourceSyncJobsRequest
        .builder()
        .indexId(myIndexId)
        .id(dataSourceId)
        .build();
    
    while (true) {
        ListDataSourceSyncJobsResponse listDataSourceSyncJobsResponse = kendra.listDataSourceSyncJobs(listDataSourceSyncJobsRequest);
        DataSourceSyncJob job = listDataSourceSyncJobsResponse.history().get(0);
        System.out.println(String.format("Status: %s", job.status()));
    }
  }
}
```