Indicizzazione di documenti in Archiviazione BLOB di Azure con Ricerca di AzureIndexing Documents in Azure Blob Storage with Azure Search

Questo articolo illustra come usare Ricerca di Azure per indicizzare documenti (ad esempio PD, documenti di Microsoft Office e numerosi altri formati comuni) salvati nell'archivio BLOB di Azure.This article shows how to use Azure Search to index documents (such as PDFs, Microsoft Office documents, and several other common formats) stored in Azure Blob storage. In primo luogo, vengono illustrate le nozioni di base per l'impostazione e la configurazione di un indicizzatore BLOB.First, it explains the basics of setting up and configuring a blob indexer. Vengono inoltre descritti in modo più dettagliato i comportamenti e gli scenari che possono verificarsi.Then, it offers a deeper exploration of behaviors and scenarios you are likely to encounter.

Formati di documento supportatiSupported document formats

L'indicizzatore BLOB può estrarre il testo dai formati di documento seguenti:The blob indexer can extract text from the following document formats:

Importante

Il supporto per gli array in formato CSV e JSON è attualmente in anteprima.Support for CSV and JSON arrays is currently in preview. Tali formati sono disponibili solo usando la versione 2016-09-01-Preview dell'API REST o la versione 2.x-preview dell'SDK .NET.These formats are available only using version 2016-09-01-Preview of the REST API or version 2.x-preview of the .NET SDK. Si ricordi che le API di anteprima servono per il test e la valutazione e non devono essere usate negli ambienti di produzione.Please remember, preview APIs are intended for testing and evaluation, and should not be used in production environments.

Configurazione dell'indicizzazione BLOBSetting up blob indexing

È possibile impostare un indicizzatore dell'Archiviazione BLOB di Azure usando:You can set up an Azure Blob Storage indexer using:

Nota

Alcune funzionalità (ad esempio, i mapping dei campi) non sono ancora disponibili nel portale e devono essere usate in modo programmatico.Some features (for example, field mappings) are not yet available in the portal, and have to be used programmatically.

In questo caso viene illustrato il flusso tramite l'API REST.Here, we demonstrate the flow using the REST API.

Passaggio 1: Creare un'origine datiStep 1: Create a data source

Un'origine dati specifica i dati da indicizzare, le credenziali necessarie per accedere ai dati e i criteri che consentono di identificare in modo efficace le modifiche apportate ai dati (righe nuove, modificate o eliminate).A data source specifies which data to index, credentials needed to access the data, and policies to efficiently identify changes in the data (new, modified, or deleted rows). Un'origine dati può essere usata da più indicizzatori nello stesso servizio di ricerca.A data source can be used by multiple indexers in the same search service.

Per l'indicizzazione BLOB, l'origine dati deve avere le proprietà obbligatorie seguenti:For blob indexing, the data source must have the following required properties:

  • name è il nome univoco dell'origine dati all'interno del servizio di ricerca.name is the unique name of the data source within your search service.
  • type deve essere azureblob.type must be azureblob.
  • credentials fornisce la stringa di connessione dell'account di archiviazione come parametro credentials.connectionString.credentials provides the storage account connection string as the credentials.connectionString parameter. Per informazioni dettagliate, vedere Come specificare le credenziali più avanti.See How to specify credentials below for details.
  • container specifica un contenitore nell'account di archiviazione.container specifies a container in your storage account. Per impostazione predefinita, tutti i BLOB all'interno del contenitore sono recuperabili.By default, all blobs within the container are retrievable. Per indicizzare soltanto i BLOB in una determinata directory virtuale, è possibile specificare la directory usando il parametro facoltativo query.If you only want to index blobs in a particular virtual directory, you can specify that directory using the optional query parameter.

Per creare un'origine dati:To create a data source:

POST https://[service name].search.windows.net/datasources?api-version=2016-09-01
Content-Type: application/json
api-key: [admin key]

{
    "name" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { "connectionString" : "DefaultEndpointsProtocol=https;AccountName=<account name>;AccountKey=<account key>;" },
    "container" : { "name" : "my-container", "query" : "<optional-virtual-directory-name>" }
}   

Per altre informazioni sull'API di creazione dell'origine dati, vedere Creare un'origine dati.For more on the Create Datasource API, see Create Datasource.

Come specificare le credenzialiHow to specify credentials

Per specificare le credenziali per il contenitore BLOB, sono disponibili questi modi:You can provide the credentials for the blob container in one of these ways:

  • Stringa di connessione dell'account di archiviazione per accesso completo: DefaultEndpointsProtocol=https;AccountName=<your storage account>;AccountKey=<your account key>.Full access storage account connection string: DefaultEndpointsProtocol=https;AccountName=<your storage account>;AccountKey=<your account key>. Per ottenere la stringa di connessione dal portale di Azure, passare al pannello dell'account di archiviazione e quindi selezionare Impostazioni > Chiavi (per gli account di archiviazione della versione classica) oppure Impostazioni > Chiavi di accesso (per gli account di archiviazione di Azure Resource Manager).You can get the connection string from the Azure portal by navigating to the storage account blade > Settings > Keys (for Classic storage accounts) or Settings > Access keys (for Azure Resource Manager storage accounts).
  • Stringa di connessione della firma di accesso condiviso (SAS) dell'account di archiviazione: BlobEndpoint=https://<your account>.blob.core.windows.net/;SharedAccessSignature=?sv=2016-05-31&sig=<the signature>&spr=https&se=<the validity end time>&srt=co&ss=b&sp=rl la SAS deve avere le autorizzazioni per le operazioni di elenco e lettura per i contenitori e gli oggetti (oggetti binario di grandi dimensioni).Storage account shared access signature (SAS) connection string: BlobEndpoint=https://<your account>.blob.core.windows.net/;SharedAccessSignature=?sv=2016-05-31&sig=<the signature>&spr=https&se=<the validity end time>&srt=co&ss=b&sp=rl The SAS should have the list and read permissions on containers and objects (blobs in this case).
  • Firma di accesso condiviso: ContainerSharedAccessUri=https://<your storage account>.blob.core.windows.net/<container name>?sv=2016-05-31&sr=c&sig=<the signature>&se=<the validity end time>&sp=rlla firma di accesso condiviso (SAS) deve avere le autorizzazioni per le operazioni di elenco e lettura sul contenitore.Container shared access signature: ContainerSharedAccessUri=https://<your storage account>.blob.core.windows.net/<container name>?sv=2016-05-31&sr=c&sig=<the signature>&se=<the validity end time>&sp=rl The SAS should have the list and read permissions on the container.

Per altre informazioni sulle firme di accesso condiviso per l'archiviazione, vedere Uso delle firme di accesso condiviso.For more info on storage shared access signatures, see Using Shared Access Signatures.

Nota

Se si usano le credenziali di firma di accesso condiviso, sarà necessario aggiornare periodicamente le credenziali dell'origine dati con firme rinnovate per impedire che scadano.If you use SAS credentials, you will need to update the data source credentials periodically with renewed signatures to prevent their expiration. Se le credenziali di firma di accesso condiviso scadono, l'indicizzatore avrà esito negativo e restituirà un messaggio di errore simile al seguente: Credentials provided in the connection string are invalid or have expired..If SAS credentials expire, the indexer will fail with an error message similar to Credentials provided in the connection string are invalid or have expired..

Passaggio 2: Creare un indiceStep 2: Create an index

L'indice consente di specificare i campi in un documento, gli attributi e altri costrutti che danno forma all'esperienza della ricerca.The index specifies the fields in a document, attributes, and other constructs that shape the search experience.

Di seguito viene illustrato come creare un indice con un campo content ricercabile per archiviare il testo estratto dagli oggetti BLOB:Here's how to create an index with a searchable content field to store the text extracted from blobs:

POST https://[service name].search.windows.net/indexes?api-version=2016-09-01
Content-Type: application/json
api-key: [admin key]

{
      "name" : "my-target-index",
      "fields": [
        { "name": "id", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "content", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false }
      ]
}

Per altre informazioni sulla creazione di indici, vedere Creare un indiceFor more on creating indexes, see Create Index

Passaggio 3: Creare un indicizzatoreStep 3: Create an indexer

Un indicizzatore si connette a un'origine dati con un indice di ricerca di destinazione e consente di pianificare l'automatizzazione dell'aggiornamento dei dati.An indexer connects a data source with a target search index, and provides a schedule to automate the data refresh.

Dopo aver creato l'indice e l'origine dati, è possibile creare l'indicizzatore:Once the index and data source have been created, you're ready to create the indexer:

POST https://[service name].search.windows.net/indexers?api-version=2016-09-01
Content-Type: application/json
api-key: [admin key]

{
  "name" : "blob-indexer",
  "dataSourceName" : "blob-datasource",
  "targetIndexName" : "my-target-index",
  "schedule" : { "interval" : "PT2H" }
}

Questo indicizzatore verrà eseguito ogni due ore (l'intervallo di pianificazione è impostato su "PT2H").This indexer will run every two hours (schedule interval is set to "PT2H"). Per eseguire un indicizzatore ogni 30 minuti, impostare l'intervallo su "PT30M".To run an indexer every 30 minutes, set the interval to "PT30M". L'intervallo minimo supportato è di 5 minuti.The shortest supported interval is 5 minutes. La pianificazione è facoltativa: se omessa, l'indicizzatore viene eseguito una sola volta al momento della creazione.The schedule is optional - if omitted, an indexer runs only once when it's created. Tuttavia, è possibile eseguire un indicizzatore su richiesta in qualsiasi momento.However, you can run an indexer on-demand at any time.

Per altre informazioni sull'API di creazione di un indicizzatore, vedere Creare un indicizzatore.For more details on the Create Indexer API, check out Create Indexer.

Indicizzazione dei BLOB con Ricerca di AzureHow Azure Search indexes blobs

A seconda della relativa configurazione, l'indicizzatore BLOB può indicizzare solo i metadati di archiviazione, opzione utile quando si è interessati solo ai metadati e non è necessario indicizzare il contenuto dei BLOB, indicizzare i metadati del contenuto e di archiviazione o indicizzare sia i metadati che il contenuto di testo.Depending on the indexer configuration, the blob indexer can index storage metadata only (useful when you only care about the metadata and don't need to index the content of blobs), storage and content metadata, or both metadata and textual content. Per impostazione predefinita, l'indicizzatore estrae sia i metadati che il contenuto.By default, the indexer extracts both metadata and content.

Nota

Per impostazione predefinita, i BLOB con contenuto strutturato, come quelli in formato JSON o CSV, vengono indicizzati come un unico blocco di testo.By default, blobs with structured content such as JSON or CSV are indexed as a single chunk of text. Per indicizzare i BLOB JSON e CSV in modo strutturato, vedere le funzionalità in anteprima Indicizzazione di BLOB JSON e Indicizzazione di BLOB CSV.If you want to index JSON and CSV blobs in a structured way, see Indexing JSON blobs and Indexing CSV blobs preview features.

Anche un documento composito o incorporato (ad esempio, un archivio ZIP o un documento di Word con una e-mail di Outlook incorporata con allegati) viene indicizzato come documento singolo.A compound or embedded document (such as a ZIP archive or a Word document with embedded Outlook email containing attachments) is also indexed as a single document.

  • Il contenuto di testo del documento viene estratto in un campo di tipo stringa denominato content.The textual content of the document is extracted into a string field named content.

Nota

Ricerca di Azure limita il testo estratto in base al piano tariffario: 32.000 caratteri per il livello gratuito, 64.000 per il livello Basic e 4 milioni per i livelli Standard, Standard S2 e Standard S3.Azure Search limits how much text it extracts depending on the pricing tier: 32,000 characters for Free tier, 64,000 for Basic, and 4 million for Standard, Standard S2 and Standard S3 tiers. Un avviso è incluso nella risposta dello stato dell'indicizzatore per i documenti troncati.A warning is included in the indexer status response for truncated documents.

  • Le proprietà dei metadati specificate dall'utente eventualmente presenti nel BLOB vengono estratte letteralmente.User-specified metadata properties present on the blob, if any, are extracted verbatim.
  • Le proprietà dei metadati BLOB standard vengono estratte nei campi seguenti:Standard blob metadata properties are extracted into the following fields:

    • metadata_storage_name (Edm.String): nome file del BLOB.metadata_storage_name (Edm.String) - the file name of the blob. Se, ad esempio, è presente un BLOB /my-container/my-folder/subfolder/resume.pdf, il valore di questo campo è resume.pdf.For example, if you have a blob /my-container/my-folder/subfolder/resume.pdf, the value of this field is resume.pdf.
    • metadata_storage_path (Edm.String): URI completo del BLOB, incluso l'account di archiviazione.metadata_storage_path (Edm.String) - the full URI of the blob, including the storage account. Ad esempio, https://myaccount.blob.core.windows.net/my-container/my-folder/subfolder/resume.pdfFor example, https://myaccount.blob.core.windows.net/my-container/my-folder/subfolder/resume.pdf
    • metadata_storage_content_type (Edm.String): tipo di contenuto specificato dal codice usato per caricare il BLOB.metadata_storage_content_type (Edm.String) - content type as specified by the code you used to upload the blob. Ad esempio: application/octet-stream.For example, application/octet-stream.
    • metadata_storage_last_modified (Edm.DateTimeOffset): ultimo timestamp modificato per il BLOB.metadata_storage_last_modified (Edm.DateTimeOffset) - last modified timestamp for the blob. Ricerca di Azure usa questo timestamp per identificare i BLOB modificati, in modo da evitare di reindicizzare tutto dopo l'indicizzazione iniziale.Azure Search uses this timestamp to identify changed blobs, to avoid reindexing everything after the initial indexing.
    • metadata_storage_size (Edm.Int64): dimensioni del BLOB in byte.metadata_storage_size (Edm.Int64) - blob size in bytes.
    • metadata_storage_content_md5 (Edm.String): hash MD5 dei contenuti del BLOB, se disponibile.metadata_storage_content_md5 (Edm.String) - MD5 hash of the blob content, if available.
  • Le proprietà dei metadati specifiche di ogni formato di documento vengono estratte nei campi elencati qui.Metadata properties specific to each document format are extracted into the fields listed here.

Non è necessario definire i campi per tutte le proprietà precedenti nell'indice di ricerca, ma solo acquisire le proprietà necessarie per l'applicazione.You don't need to define fields for all of the above properties in your search index - just capture the properties you need for your application.

Nota

I nomi dei campi nell'indice esistente saranno spesso diversi da quelli generati durante l'estrazione della documentazione.Often, the field names in your existing index will be different from the field names generated during document extraction. È possibile usare i mapping dei campi per eseguire il mapping dei nomi di proprietà forniti da Ricerca di Azure ai nomi di campo nell'indice di ricerca.You can use field mappings to map the property names provided by Azure Search to the field names in your search index. Di seguito verrà visualizzato un esempio di mapping dei campi.You will see an example of field mappings use below.

Definizione di chiavi di documento e dei mapping dei campiDefining document keys and field mappings

In Ricerca di Azure la chiave del documento identifica un documento in modo univoco.In Azure Search, the document key uniquely identifies a document. Ogni indice di ricerca deve avere esclusivamente un campo chiave di tipo Edm.String.Every search index must have exactly one key field of type Edm.String. Il campo chiave è necessario per ogni documento da aggiungere all'indice (è di fatto l'unico campo obbligatorio).The key field is required for each document that is being added to the index (it is actually the only required field).

È necessario valutare attentamente di quale campo estratto eseguire il mapping al campo chiave per l'indice.You should carefully consider which extracted field should map to the key field for your index. I candidati sono:The candidates are:

  • metadata_storage_name: può essere un candidato valido, tuttavia è bene notare che 1) è possibile che i nomi non siano univoci, perché potrebbero esserci BLOB con lo stesso nome in cartelle diverse e 2) è possibile che il nome contenga caratteri non validi nelle chiavi dei documenti, ad esempio trattini.metadata_storage_name - this might be a convenient candidate, but note that 1) the names might not be unique, as you may have blobs with the same name in different folders, and 2) the name may contain characters that are invalid in document keys, such as dashes. È possibile gestire i caratteri non validi usando la funzione di mapping dei campi base64Encode. In questo caso, è necessario ricordarsi di codificare le chiavi dei documenti quando si passano nelle chiamate API, ad esempio in una ricerca.You can deal with invalid characters by using the base64Encode field mapping function - if you do this, remember to encode document keys when passing them in API calls such as Lookup. In .NET, ad esempio, è possibile usare il metodo UrlTokenEncode method a tale scopo.(For example, in .NET you can use the UrlTokenEncode method for that purpose).
  • metadata_storage_path: l'uso del percorso completo garantisce l'univocità, ma il percorso contiene sicuramente caratteri / che non sono validi nella chiave di un documento.metadata_storage_path - using the full path ensures uniqueness, but the path definitely contains / characters that are invalid in a document key. Come prima, è possibile codificare le chiavi usando la funzione base64Encode.As above, you have the option of encoding the keys using the base64Encode function.
  • Se nessuna delle opzioni elencate è appropriata, è possibile aggiungere una proprietà di metadati personalizzati ai BLOB.If none of the options above work for you, you can add a custom metadata property to the blobs. Questa opzione, tuttavia, richiede che il processo di caricamento del BLOB aggiunga la proprietà dei metadati a tutti i BLOB.This option does, however, require your blob upload process to add that metadata property to all blobs. Poiché la chiave è una proprietà obbligatoria, tutti i BLOB privi di tale proprietà non potranno essere indicizzati.Since the key is a required property, all blobs that don't have that property will fail to be indexed.

Importante

Se non esiste alcun mapping esplicito per il campo chiave nell'indice, Ricerca di Azure usa automaticamente metadata_storage_path come chiave e codifica i valori delle chiavi in base 64 (la seconda opzione illustrata sopra).If there is no explicit mapping for the key field in the index, Azure Search automatically uses metadata_storage_path as the key and base-64 encodes key values (the second option above).

Per questo esempio, si seleziona il campo metadata_storage_name come chiave del documento.For this example, let's pick the metadata_storage_name field as the document key. Si supponga anche che l'indice includa un campo chiave denominato key e un campo fileSize in cui archiviare le dimensioni del documento.Let's also assume your index has a key field named key and a field fileSize for storing the document size. Per collegare gli elementi come si vuole, specificare i mapping di campo seguenti quando si crea o si aggiorna l'indicizzatore:To wire things up as desired, specify the following field mappings when creating or updating your indexer:

"fieldMappings" : [
  { "sourceFieldName" : "metadata_storage_name", "targetFieldName" : "key", "mappingFunction" : { "name" : "base64Encode" } },
  { "sourceFieldName" : "metadata_storage_size", "targetFieldName" : "fileSize" }
]

Per unire il tutto, ecco come è possibile aggiungere i mapping di campo e abilitare la codifica in base 64 delle chiavi per un indicizzatore esistente:To bring this all together, here's how you can add field mappings and enable base-64 encoding of keys for an existing indexer:

PUT https://[service name].search.windows.net/indexers/blob-indexer?api-version=2016-09-01
Content-Type: application/json
api-key: [admin key]

{
  "dataSourceName" : " blob-datasource ",
  "targetIndexName" : "my-target-index",
  "schedule" : { "interval" : "PT2H" },
  "fieldMappings" : [
    { "sourceFieldName" : "metadata_storage_name", "targetFieldName" : "key", "mappingFunction" : { "name" : "base64Encode" } },
    { "sourceFieldName" : "metadata_storage_size", "targetFieldName" : "fileSize" }
  ]
}

Nota

Per altre informazioni sui mapping dei campi, leggere questo articolo.To learn more about field mappings, see this article.

Controllo dei BLOB da indicizzareControlling which blobs are indexed

È possibile controllare quali BLOB vengono indicizzati e quali vengono ignorati.You can control which blobs are indexed, and which are skipped.

Indicizzare solo i BLOB con estensioni di file specificheIndex only the blobs with specific file extensions

È possibile indicizzare solo i BLOB con le estensioni di file specificate tramite il parametro di configurazione dell'indicizzatore indexedFileNameExtensions.You can index only the blobs with the file name extensions you specify by using the indexedFileNameExtensions indexer configuration parameter. Il valore è una stringa contenente un elenco delimitato da virgole di estensioni di file (precedute da un punto).The value is a string containing a comma-separated list of file extensions (with a leading dot). Ad esempio, per indicizzare solo i BLOB .PDF e .DOCX eseguire questa operazione:For example, to index only the .PDF and .DOCX blobs, do this:

PUT https://[service name].search.windows.net/indexers/[indexer name]?api-version=2016-09-01
Content-Type: application/json
api-key: [admin key]

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "indexedFileNameExtensions" : ".pdf,.docx" } }
}

Escludere BLOB con estensioni di file specificheExclude blobs with specific file extensions

È possibile escludere dall'indicizzazione i BLOB con estensioni di file specifiche usando il parametro di configurazione excludedFileNameExtensions.You can exclude blobs with specific file name extensions from indexing by using the excludedFileNameExtensions configuration parameter. Il valore è una stringa contenente un elenco delimitato da virgole di estensioni di file (precedute da un punto).The value is a string containing a comma-separated list of file extensions (with a leading dot). Ad esempio, per indicizzare tutti i BLOB ad eccezione di quelli con le estensioni .PNG e .JPEG eseguire questa operazione:For example, to index all blobs except those with the .PNG and .JPEG extensions, do this:

PUT https://[service name].search.windows.net/indexers/[indexer name]?api-version=2016-09-01
Content-Type: application/json
api-key: [admin key]

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "excludedFileNameExtensions" : ".png,.jpeg" } }
}

Se sono presenti entrambi i parametri indexedFileNameExtensions e excludedFileNameExtensions, Ricerca di Azure esamina in primo luogo indexedFileNameExtensions, quindi excludedFileNameExtensions.If both indexedFileNameExtensions and excludedFileNameExtensions parameters are present, Azure Search first looks at indexedFileNameExtensions, then at excludedFileNameExtensions. Ciò significa che se la stessa estensione di file è presente in entrambi gli elenchi, verrà esclusa dall'indicizzazione.This means that if the same file extension is present in both lists, it will be excluded from indexing.

Gestire tipi di contenuto non supportatiDealing with unsupported content types

Per impostazione predefinita, l'indicizzatore BLOB viene arrestato non appena viene rilevato un BLOB con un tipo di contenuto non supportato, ad esempio un'immagine.By default, the blob indexer stops as soon as it encounters a blob with an unsupported content type (for example, an image). Naturalmente, è possibile usare il parametro excludedFileNameExtensions per ignorare determinati tipi di contenuto.You can of course use the excludedFileNameExtensions parameter to skip certain content types. Potrebbe tuttavia essere necessario indicizzare BLOB senza conoscere in anticipo tutti i tipi di contenuto possibili.However, you may need to index blobs without knowing all the possible content types in advance. Per continuare l'indicizzazione quando viene rilevato un tipo di contenuto non supportato, impostare il parametro di configurazione failOnUnsupportedContentType su false:To continue indexing when an unsupported content type is encountered, set the failOnUnsupportedContentType configuration parameter to false:

PUT https://[service name].search.windows.net/indexers/[indexer name]?api-version=2016-09-01
Content-Type: application/json
api-key: [admin key]

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "failOnUnsupportedContentType" : false } }
}

Ignorare gli errori di analisiIgnoring parsing errors

La logica di estrazione documenti di Ricerca di Azure non è perfetta e talvolta può non riuscire ad analizzare i documenti con un tipo di contenuto supportato, ad esempio DOCX o PDF.Azure Search document extraction logic isn't perfect and will sometimes fail to parse documents of a supported content type, such as .DOCX or .PDF. Per evitare che l'indicizzazione venga interrotta in tali casi, impostare i parametri di configurazione maxFailedItems e maxFailedItemsPerBatch su valori accettabili.If you do not want to interrupt the indexing in such cases, set the maxFailedItems and maxFailedItemsPerBatch configuration parameters to some reasonable values. Ad esempio:For example:

{
  ... other parts of indexer definition
  "parameters" : { "maxFailedItems" : 10, "maxFailedItemsPerBatch" : 10 }
}

Controllo delle parti di BLOB da indicizzareControlling which parts of the blob are indexed

Il parametro di configurazione dataToExtract permette di controllare quali parti dei BLOB vengono indicizzate.You can control which parts of the blobs are indexed using the dataToExtract configuration parameter. I valori possibili sono i seguenti:It can take the following values:

Ad esempio, per indicizzare solo i metadati di archiviazione, usare:For example, to index only the storage metadata, use:

PUT https://[service name].search.windows.net/indexers/[indexer name]?api-version=2016-09-01
Content-Type: application/json
api-key: [admin key]

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "dataToExtract" : "storageMetadata" } }
}

Usare i metadati dei BLOB per controllare il modo in cui vengono indicizzati i BLOBUsing blob metadata to control how blobs are indexed

I parametri di configurazione descritti in precedenza si applicano a tutti i BLOB.The configuration parameters described above apply to all blobs. In alcuni casi è consigliabile controllare il modo in cui vengono indicizzati i singoli BLOB.Sometimes, you may want to control how individual blobs are indexed. A tale scopo è possibile aggiungere i valori e le proprietà seguenti dei metadati del BLOB:You can do this by adding the following blob metadata properties and values:

Nome proprietàProperty name Valore proprietàProperty value SpiegazioneExplanation
AzureSearch_SkipAzureSearch_Skip "true""true" Indica all'indicizzatore BLOB di ignorare completamente il BLOB.Instructs the blob indexer to completely skip the blob. Non verrà tentata l'estrazione dei metadati né del contenuto.Neither metadata nor content extraction is attempted. È utile quando un determinato BLOB ha ripetutamente esito negativo e interrompe il processo di indicizzazione.This is useful when a particular blob fails repeatedly and interrupts the indexing process.
AzureSearch_SkipContentAzureSearch_SkipContent "true""true" Equivale all'impostazione "dataToExtract" : "allMetadata" descritta in precedenza nell'ambito di un BLOB specifico.This is equivalent of "dataToExtract" : "allMetadata" setting described above scoped to a particular blob.

Indicizzazione incrementale e rilevamento delle eliminazioniIncremental indexing and deletion detection

Quando si configura un indicizzatore BLOB per l'esecuzione in base a una pianificazione, vengono reindicizzati solo i BLOB modificati, come determinato dal timestamp LastModified del BLOB.When you set up a blob indexer to run on a schedule, it re-indexes only the changed blobs, as determined by the blob's LastModified timestamp.

Nota

Non è necessario specificare un criterio di rilevamento delle modifiche perché l'indicizzazione incrementale viene abilitata automaticamente.You don't have to specify a change detection policy – incremental indexing is enabled for you automatically.

Per supportare l'eliminazione di documenti, usare un approccio di "eliminazione temporanea".To support deleting documents, use a "soft delete" approach. Se si eliminano completamente i BLOB, i documenti corrispondenti non verranno rimossi dall'indice della ricerca.If you delete the blobs outright, corresponding documents will not be removed from the search index. Seguire invece questa procedura:Instead, use the following steps:

  1. Aggiungere al BLOB una proprietà di metadati personalizzata per indicare a Ricerca di Azure che viene eliminato in modo logicoAdd a custom metadata property to the blob to indicate to Azure Search that it is logically deleted
  2. Configurare un criterio di rilevamento eliminazione temporanea nell'origine datiConfigure a soft deletion detection policy on the data source
  3. Dopo che l'indicizzatore ha elaborato il BLOB (come indicato dall'API di stato dell'indicizzatore), è possibile eliminare fisicamente il BLOBOnce the indexer has processed the blob (as shown by the indexer status API), you can physically delete the blob

Il criterio illustrato sotto, ad esempio, considera l'eliminazione di un BLOB se ha una proprietà di metadati IsDeleted con il valore true:For example, the following policy considers a blob to be deleted if it has a metadata property IsDeleted with the value true:

PUT https://[service name].search.windows.net/datasources/blob-datasource?api-version=2016-09-01
Content-Type: application/json
api-key: [admin key]

{
    "name" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { "connectionString" : "<your storage connection string>" },
    "container" : { "name" : "my-container", "query" : "my-folder" },
    "dataDeletionDetectionPolicy" : {
        "@odata.type" :"#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",     
        "softDeleteColumnName" : "IsDeleted",
        "softDeleteMarkerValue" : "true"
    }
}   

Indicizzazione di set di dati di grandi dimensioniIndexing large datasets

L'indicizzazione di BLOB può richiedere molto tempo.Indexing blobs can be a time-consuming process. Quando si hanno milioni di BLOB da indicizzare, è possibile velocizzare l'operazione partizionando i dati e usando più indicizzatori per elaborare i dati in parallelo.In cases where you have millions of blobs to index, you can speed up indexing by partitioning your data and using multiple indexers to process the data in parallel. A tale scopo, è possibile procedere come segue:Here's how you can set this up:

  • Partizionare i dati in più contenitori BLOB o cartelle virtuali.Partition your data into multiple blob containers or virtual folders
  • Impostare diverse origini dati di Ricerca di Azure, una per ogni contenitore o cartella.Set up several Azure Search data sources, one per container or folder. Per puntare a una cartella BLOB, usare il parametro query:To point to a blob folder, use the query parameter:

    {
        "name" : "blob-datasource",
        "type" : "azureblob",
        "credentials" : { "connectionString" : "<your storage connection string>" },
        "container" : { "name" : "my-container", "query" : "my-folder" }
    }
    
  • Creare un indicizzatore corrispondente per ogni origine dati.Create a corresponding indexer for each data source. Tutti gli indicizzatori possono puntare allo stesso indice di ricerca di destinazione.All the indexers can point to the same target search index.

  • Un'unità di ricerca del servizio permette di eseguire un indicizzatore in qualsiasi momento.One search unit in your service can run one indexer at any given time. La creazione di più indicizzatori come descritto in precedenza è utile solo se effettivamente eseguiti in parallelo.Creating multiple indexers as described above is only useful if they actually run in parallel. Per eseguire più indicizzatori in parallelo, scalare orizzontalmente il servizio di ricerca mediante la creazione di un numero appropriato di partizioni e repliche.To run multiple indexers in parallel, scale out your search service by creating an appropriate number of partitions and replicas. Ad esempio, se il servizio di ricerca dispone di 6 unità di ricerca (ad esempio 2 partizioni x 3 repliche), con 6 indicizzatori che possono quindi essere eseguiti contemporaneamente, viene determinato un aumento della velocità effettiva di indicizzazione pari a sei volte.For example, if your search service has 6 search units (for example, 2 partitions x 3 replicas), then 6 indexers can run simultaneously, resulting in a six-fold increase in the indexing throughput. Per ulteriori informazioni sulla scalabilità e la pianificazione della capacità, vedere Ridimensionare i livelli di risorse per i carichi di lavoro di indicizzazione e query in Ricerca di Azure.To learn more about scaling and capacity planning, see Scale resource levels for query and indexing workloads in Azure Search.

Si consiglia di "comporre" i documenti da più origini nell'indice.You may want to "assemble" documents from multiple sources in your index. Ad esempio, è possibile unire testo dagli oggetti binari di grandi dimensioni con altri metadati archiviati in Cosmos DB.For example, you may want to merge text from blobs with other metadata stored in Cosmos DB. È anche possibile utilizzare l'API di indicizzazione push insieme a diversi indicizzatori per compilare i documenti di ricerca da più parti.You can even use the push indexing API together with various indexers to build up search documents from multiple parts.

Per funzionare, tutti gli indicizzatori e altri componenti devono concordare sulla chiave del documento.For this to work, all indexers and other components need to agree on the document key. Per una descrizione dettagliata, vedere l'articolo esterno: Combinare documenti con altri dati in Ricerca di Azure .For a detailed walk-through, see this external article: Combine documents with other data in Azure Search .

Indicizzazione di testo normaleIndexing plain text

Se tutti gli oggetti binari di grandi dimensioni contengono testo normale nella stessa codifica, è possibile migliorare in modo significativo le prestazioni di indicizzazione utilizzando la modalità di analisi del testo.If all your blobs contain plain text in the same encoding, you can significantly improve indexing performance by using text parsing mode. Per utilizzare la modalità di analisi del testo, impostare la parsingMode proprietà di configurazione su text:To use text parsing mode, set the parsingMode configuration property to text:

PUT https://[service name].search.windows.net/indexers/[indexer name]?api-version=2016-09-01
Content-Type: application/json
api-key: [admin key]

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "parsingMode" : "text" } }
}

Per impostazione predefinita, verrà utilizzata la codifica UTF-8.By default, the UTF-8 encoding is assumed. Per specificare una codifica diversa, utilizzare la proprietà di configurazione encoding:To specify a different encoding, use the encoding configuration property:

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "parsingMode" : "text", "encoding" : "windows-1252" } }
}

Proprietà di metadati specifiche del tipo di contenutoContent type-specific metadata properties

La tabella seguente riepiloga l'elaborazione eseguita per ogni formato di documento e descrive le proprietà dei metadati estratte da Ricerca di Azure.The following table summarizes processing done for each document format, and describes the metadata properties extracted by Azure Search.

Formato documento/tipo di contenutoDocument format / content type Proprietà di metadati specifiche del tipo di contenutoContent-type specific metadata properties Dettagli elaborazioneProcessing details
HTML (text/html)HTML (text/html) metadata_content_encoding
metadata_content_type
metadata_language
metadata_description
metadata_keywords
metadata_title
Rimozione del markup HTML ed estrazione del testoStrip HTML markup and extract text
PDF (application/pdf)PDF (application/pdf) metadata_content_type
metadata_language
metadata_author
metadata_title
Estrazione del testo, inclusi i documenti incorporati (escluse le immagini)Extract text, including embedded documents (excluding images)
DOCX (application/vnd.openxmlformats-officedocument.wordprocessingml.document)DOCX (application/vnd.openxmlformats-officedocument.wordprocessingml.document) metadata_content_type
metadata_author
metadata_character_count
metadata_creation_date
metadata_last_modified
metadata_page_count
metadata_word_count
Estrazione del testo, inclusi i documenti incorporatiExtract text, including embedded documents
DOC (application/msword)DOC (application/msword) metadata_content_type
metadata_author
metadata_character_count
metadata_creation_date
metadata_last_modified
metadata_page_count
metadata_word_count
Estrazione del testo, inclusi i documenti incorporatiExtract text, including embedded documents
XLSX (application/vnd.openxmlformats-officedocument.spreadsheetml.sheet)XLSX (application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
Estrazione del testo, inclusi i documenti incorporatiExtract text, including embedded documents
XLS (application/vnd.ms-excel)XLS (application/vnd.ms-excel) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
Estrazione del testo, inclusi i documenti incorporatiExtract text, including embedded documents
PPTX (application/vnd.openxmlformats-officedocument.presentationml.presentation)PPTX (application/vnd.openxmlformats-officedocument.presentationml.presentation) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
metadata_slide_count
metadata_title
Estrazione del testo, inclusi i documenti incorporatiExtract text, including embedded documents
PPT (application/vnd.ms-powerpoint)PPT (application/vnd.ms-powerpoint) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
metadata_slide_count
metadata_title
Estrazione del testo, inclusi i documenti incorporatiExtract text, including embedded documents
MSG (application/vnd.ms-outlook)MSG (application/vnd.ms-outlook) metadata_content_type
metadata_message_from
metadata_message_to
metadata_message_cc
metadata_message_bcc
metadata_creation_date
metadata_last_modified
metadata_subject
Estrazione del testo, inclusi gli allegatiExtract text, including attachments
ZIP (application/zip)ZIP (application/zip) metadata_content_type Estrazione del testo da tutti i documenti nell'archivioExtract text from all documents in the archive
XML (application/xml)XML (application/xml) metadata_content_type
metadata_content_encoding
Rimozione del markup XML ed estrazione del testoStrip XML markup and extract text
JSON (application/json)JSON (application/json) metadata_content_type
metadata_content_encoding
Estrazione del testoExtract text
NOTA: per conoscere i dettagli su come estrarre più campi documento da un BLOB JSON, vedere Indicizzazione di BLOB JSONNOTE: If you need to extract multiple document fields from a JSON blob, see Indexing JSON blobs for details
EML (message/rfc822)EML (message/rfc822) metadata_content_type
metadata_message_from
metadata_message_to
metadata_message_cc
metadata_creation_date
metadata_subject
Estrazione del testo, inclusi gli allegatiExtract text, including attachments
RTF (application/rtf)RTF (application/rtf) metadata_content_type
metadata_author
metadata_character_count
metadata_creation_date
metadata_page_count
metadata_word_count
Estrazione del testoExtract text
Testo normale (text/plain)Plain text (text/plain) metadata_content_type
metadata_content_encoding
Estrazione del testoExtract text

Come contribuire al miglioramento di Ricerca di AzureHelp us make Azure Search better

Per richieste di funzionalità o idee su miglioramenti da apportare, è possibile usare il sito UserVoice.If you have feature requests or ideas for improvements, let us know on our UserVoice site.