

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Connettore sorgente dati personalizzato
<a name="data-source-custom"></a>

Utilizza un'origine dati personalizzata quando disponi di un repository che Amazon Kendra non fornisce ancora un connettore per l'origine dati per. Puoi utilizzarlo per visualizzare le stesse metriche della cronologia delle esecuzioni fornite dalle fonti di Amazon Kendra dati anche quando non puoi utilizzare le sorgenti dati Amazon Kendra di origine per sincronizzare i tuoi repository. Utilizzalo per creare un'esperienza di monitoraggio della sincronizzazione coerente tra le fonti di Amazon Kendra dati e quelle personalizzate. In particolare, utilizza un'origine dati personalizzata per visualizzare le metriche di sincronizzazione per un connettore di origine dati creato utilizzando [BatchPutDocument](https://docs.aws.amazon.com/kendra/latest/APIReference/API_BatchPutDocument.html)and [BatchDeleteDocument](https://docs.aws.amazon.com/kendra/latest/APIReference/API_BatchDeleteDocument.html) APIs.

Per la risoluzione dei problemi relativi al connettore di origine dati personalizzato Amazon Kendra, consulta. [Risoluzione dei problemi relativi alle origini dati](troubleshooting-data-sources.md)

Quando crei un'origine dati personalizzata, hai il controllo completo su come vengono selezionati i documenti da indicizzare. Amazon Kendra fornisce solo informazioni metriche che è possibile utilizzare per monitorare i processi di sincronizzazione delle sorgenti dati. È necessario creare ed eseguire il crawler che determina i documenti indicizzati dalla fonte di dati.

È necessario specificare il titolo principale dei documenti utilizzando l'oggetto [Document](https://docs.aws.amazon.com/kendra/latest/APIReference/API_Document.html) e `_source_uri` per `DocumentURI` includerlo nella risposta del risultato. [DocumentAttribute](https://docs.aws.amazon.com/kendra/latest/APIReference/API_DocumentAttribute.html)`DocumentTitle``Query`

È possibile creare un identificatore per l'origine dati personalizzata utilizzando la console o l'[CreateDataSource](https://docs.aws.amazon.com/kendra/latest/APIReference/API_CreateDataSource.html)API. Per utilizzare la console, assegna un nome alla fonte di dati e, facoltativamente, una descrizione e dei tag delle risorse. Dopo aver creato l'origine dati, viene visualizzato un ID dell'origine dati. Copia questo ID per utilizzarlo quando sincronizzi l'origine dati con l'indice.

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


Puoi anche creare un'origine dati personalizzata utilizzando l'`CreateDataSource`API. L'API restituisce un ID da utilizzare quando sincronizzi l'origine dati. Quando utilizzi l'`CreateDataSource`API per creare un'origine dati personalizzata, non puoi impostare i `Configuration` `Schedule` parametri `RoleArn` o. Se imposti questi parametri, Amazon Kendra restituisce un'`ValidationException`eccezione.

Per utilizzare un'origine dati personalizzata, create un'applicazione responsabile dell'aggiornamento dell' Amazon Kendra indice. L'applicazione dipende dal crawler creato dall'utente. Il crawler legge i documenti presenti nel repository e determina a quali devono essere inviati. Amazon Kendra L'applicazione deve eseguire le seguenti operazioni: 

1. Scansiona il tuo repository e crea un elenco dei documenti in esso contenuti che sono stati aggiunti, aggiornati o eliminati.

1. Chiama l'[StartDataSourceSyncJob](https://docs.aws.amazon.com/kendra/latest/APIReference/API_StartDataSourceSyncJob.html)API per segnalare che è in corso un processo di sincronizzazione. Fornisci un ID di origine dati per identificare l'origine dati da sincronizzare. Amazon Kendra restituisce un ID di esecuzione per identificare un particolare processo di sincronizzazione.

1. Chiama l'[BatchDeleteDocument](https://docs.aws.amazon.com/kendra/latest/APIReference/API_BatchDeleteDocument.html)API per rimuovere i documenti dall'indice. Fornisci l'ID dell'origine dati e l'ID di esecuzione per identificare l'origine dati da sincronizzare e il processo a cui è associato questo aggiornamento.

1. Chiama l'[StopDataSourceSyncJob](https://docs.aws.amazon.com/kendra/latest/APIReference/API_StopDataSourceSyncJob.html)API per segnalare la fine del processo di sincronizzazione. Dopo aver chiamato l'`StopDataSourceSyncJob`API, l'ID di esecuzione associato non è più valido.

1. Chiama l'[ListDataSourceSyncJobs](https://docs.aws.amazon.com/kendra/latest/APIReference/API_ListDataSourceSyncJobs.html)API con gli identificatori dell'indice e dell'origine dati per elencare i processi di sincronizzazione per l'origine dati e per visualizzare le metriche per i processi di sincronizzazione.

Dopo aver terminato un processo di sincronizzazione, puoi iniziare un nuovo processo di sincronizzazione. Può trascorrere un periodo di tempo prima che tutti i documenti inviati vengano aggiunti all'indice. Utilizza l'`ListDataSourceSyncJobs`API per visualizzare lo stato del processo di sincronizzazione. Se il risultato `Status` del processo di sincronizzazione è`SYNCING_INDEXING`, alcuni documenti sono ancora in fase di indicizzazione. È possibile avviare un nuovo processo di sincronizzazione quando lo stato del lavoro precedente è `FAILED` o. `SUCCEEDED`

Dopo aver chiamato l'`StopDataSourceSyncJob`API, non è possibile utilizzare un identificatore del processo di sincronizzazione in una chiamata alla sala `BatchPutDocument` operatoria `BatchDeleteDocument` APIs. In tal caso, tutti i documenti inviati vengono restituiti nel messaggio di `FailedDocuments` risposta dell'API.

## Attributi obbligatori
<a name="custom-required-attributes"></a>

Quando invii un documento all' Amazon Kendra utilizzo dell'`BatchPutDocument`API, ogni documento richiede due attributi per identificare la fonte di dati e l'esecuzione di sincronizzazione a cui appartiene. È necessario fornire i seguenti due attributi per mappare correttamente i documenti dall'origine dati personalizzata a un Amazon Kendra indice:
+ `_data_source_id`—L'identificatore della fonte di dati. Viene restituito quando si crea l'origine dati con la console o l'`CreateDataSource`API.
+ `_data_source_sync_job_execution_id`—L'identificatore dell'esecuzione di sincronizzazione. Viene restituito quando si avvia la sincronizzazione dell'indice con l'API. `StartDataSourceSyncJob`

Di seguito è riportato il codice JSON necessario per indicizzare un documento utilizzando un'origine dati personalizzata.

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

Quando rimuovi un documento dall'indice utilizzando l'`BatchDeleteDocument`API, devi specificare i due campi seguenti nel `DataSourceSyncJobMetricTarget` parametro:
+ `DataSourceId`—L'identificatore della fonte di dati. Viene restituito quando si crea l'origine dati con la console o l'`CreateDataSource`API.
+ `DataSourceSyncJobId`—L'identificatore dell'esecuzione di sincronizzazione. Viene restituito quando si avvia la sincronizzazione dell'indice con l'API. `StartDataSourceSyncJob`

Di seguito è riportato il codice JSON necessario per eliminare un documento dall'indice utilizzando l'`BatchDeleteDocument`API.

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

## Visualizzazione dei parametri
<a name="custom-metrics"></a>

Al termine di un processo di sincronizzazione, puoi utilizzare l'[DataSourceSyncJobMetrics](https://docs.aws.amazon.com/kendra/latest/APIReference/API_DataSourceSyncJobMetrics.html)API per ottenere le metriche associate al processo di sincronizzazione. Usalo per monitorare le sincronizzazioni delle sorgenti dati personalizzate.

Se invii lo stesso documento più volte, come parte dell'`BatchPutDocument`API, dell'API o se il `BatchDeleteDocument` documento viene inviato sia per l'aggiunta che per l'eliminazione, il documento viene conteggiato una sola volta nelle metriche.
+ `DocumentsAdded`—Il numero di documenti inviati utilizzando l'`BatchPutDocument`API associata a questo processo di sincronizzazione aggiunti all'indice per la prima volta. Se un documento viene inviato per l'aggiunta più di una volta in una sincronizzazione, il documento viene conteggiato solo una volta nelle metriche.
+ `DocumentsDeleted`—Il numero di documenti inviati utilizzando l'`BatchDeleteDocument`API associata a questo processo di sincronizzazione è stato eliminato dall'indice. Se un documento viene inviato per l'eliminazione più di una volta in una sincronizzazione, il documento viene conteggiato solo una volta nelle metriche.
+ `DocumentsFailed`—Il numero di documenti associati a questo processo di sincronizzazione la cui indicizzazione non è riuscita. Si tratta di documenti che sono stati accettati Amazon Kendra per l'indicizzazione ma che non è stato possibile indicizzare o eliminare. Se un documento non viene accettato da Amazon Kendra, l'identificatore del documento viene restituito nella proprietà di `FailedDocuments` risposta di and. `BatchPutDocument` `BatchDeleteDocument` APIs
+ `DocumentsModified`—Il numero di documenti modificati inviati utilizzando l'`BatchPutDocument`API associata a questo processo di sincronizzazione che sono stati modificati nell' Amazon Kendra indice.

Amazon Kendra emette Amazon CloudWatch metriche anche durante l'indicizzazione dei documenti. [Per ulteriori informazioni, consulta Monitoraggio con. Amazon KendraAmazon CloudWatch](https://docs.aws.amazon.com/kendra/latest/dg/cloudwatch-metrics.html)

Amazon Kendra non restituisce la `DocumentsScanned` metrica per le fonti di dati personalizzate. Emette anche le CloudWatch metriche elencate nel documento [Metriche](https://docs.aws.amazon.com/kendra/latest/dg/cloudwatch-metrics.html#cloudwatch-metrics-data-source) per le fonti di dati. Amazon Kendra 

## Ulteriori informazioni
<a name="custom-learn-more"></a>

Per saperne di più sull'integrazione Amazon Kendra con la tua fonte di dati personalizzata, consulta:
+ [Aggiungere fonti di dati personalizzate a Amazon Kendra](https://aws.amazon.com/blogs/machine-learning/adding-custom-data-sources-to-amazon-kendra/)

# Fonte di dati personalizzata (Java)
<a name="custom-java-sample"></a>

Il codice seguente fornisce un esempio di implementazione di un'origine dati personalizzata utilizzando Java. Il programma crea innanzitutto un'origine dati personalizzata e quindi sincronizza i nuovi documenti aggiunti all'indice con l'origine dati personalizzata.

Il codice seguente illustra la creazione e l'utilizzo di un'origine dati personalizzata. Quando si utilizza un'origine dati personalizzata nell'applicazione, non è necessario creare una nuova origine dati (processo una tantum) ogni volta che si sincronizza l'indice con l'origine dati. L'ID dell'indice e l'ID dell'origine dati vengono utilizzati per sincronizzare i dati.

```
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()));
    }
  }
}
```