Indexação de documentos no Armazenamento de Blobs do Azure com o Azure SearchIndexing Documents in Azure Blob Storage with Azure Search

Este artigo mostra como usar o Azure Search para indexar documentos (como PDFs, documentos do Microsoft Office e vários outros formatos comuns) armazenados no armazenamento de blobs do 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. Primeiro, ele explica as noções básicas de configuração de um indexador de blob.First, it explains the basics of setting up and configuring a blob indexer. Em seguida, ele explora mais profundamente os comportamentos e cenários que você pode encontrar.Then, it offers a deeper exploration of behaviors and scenarios you are likely to encounter.

Formatos de documento com suporteSupported document formats

O indexador de blob pode extrair o texto dos seguintes formatos de documento:The blob indexer can extract text from the following document formats:

Configuração da indexação de blobSetting up blob indexing

Você pode configurar um indexador do Armazenamento de Blobs do Azure usando:You can set up an Azure Blob Storage indexer using:

Observação

Alguns recursos (por exemplo, mapeamentos de campo) ainda não estão disponíveis no portal e precisam ser usados por meio de programação.Some features (for example, field mappings) are not yet available in the portal, and have to be used programmatically.

Aqui, demonstraremos o fluxo usando a API REST.Here, we demonstrate the flow using the REST API.

Etapa 1: Criar uma fonte de dadosStep 1: Create a data source

Uma fonte de dados especifica quais dados indexar, as credenciais necessárias para acessar os dados e as políticas que identificam com eficiência as alterações nos dados (linhas novas, modificadas ou excluídas).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). Uma fonte de dados pode ser usada por vários indexadores no mesmo serviço de pesquisa.A data source can be used by multiple indexers in the same search service.

Para a indexação de blobs, a fonte de dados deve ter as seguintes propriedades requeridas:For blob indexing, the data source must have the following required properties:

  • name é o nome exclusivo da fonte de dados dentro de seu serviço de pesquisa.name is the unique name of the data source within your search service.
  • type deve ser azureblob.type must be azureblob.
  • credentials fornece a cadeia de conexão da conta de armazenamento como o parâmetro credentials.connectionString.credentials provides the storage account connection string as the credentials.connectionString parameter. Consulte Como especificar credenciais abaixo para obter detalhes.See How to specify credentials below for details.
  • container especifica um contêiner em sua conta de armazenamento.container specifies a container in your storage account. Por padrão, todos os blobs no contêiner são recuperáveis.By default, all blobs within the container are retrievable. Se você quiser apenas blobs de índice em um diretório virtual específico, especifique o diretório usando o parâmetro opcional query.If you only want to index blobs in a particular virtual directory, you can specify that directory using the optional query parameter.

Para criar uma fonte de dados:To create a data source:

POST https://[service name].search.windows.net/datasources?api-version=2019-05-06
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>" }
}   

Para obter mais informações sobre Criar a API da Fonte de Dados, consulte Criar Fonte de Dados.For more on the Create Datasource API, see Create Datasource.

Como especificar credenciaisHow to specify credentials

Você pode fornecer as credenciais para o contêiner de blobs de uma das seguintes maneiras:You can provide the credentials for the blob container in one of these ways:

  • Cadeia de conexão da conta de armazenamento com acesso completo: DefaultEndpointsProtocol=https;AccountName=<your storage account>;AccountKey=<your account key> Você pode obter a cadeia de conexão do portal do Azure, navegando até a folha da conta de armazenamento > Configurações > chaves (para contas de armazenamento clássicas) ou configurações > chaves de acesso (para contas de armazenamento do Azure Resource Manager).Full access storage account connection string: DefaultEndpointsProtocol=https;AccountName=<your storage account>;AccountKey=<your account key> 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).
  • Cadeia de conexão da SAS (assinatura de acesso compartilhado) de conta de armazenamento: 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 As SAS devem ter as permissões de lista e leitura nos contêineres e objetos (blobs neste caso).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).
  • Assinatura de Acesso Compartilhado do contêiner: 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 As SAS devem ter a lista e permissões de leitura no contêiner.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.

Para saber mais sobre assinaturas de acesso compartilhado de armazenamento, veja Uso de Assinaturas de Acesso Compartilhado.For more info on storage shared access signatures, see Using Shared Access Signatures.

Observação

Se você usar credenciais SAS, você precisará atualizar as credenciais de fonte de dados periodicamente com assinaturas renovadas para impedir sua expiração.If you use SAS credentials, you will need to update the data source credentials periodically with renewed signatures to prevent their expiration. Se as credenciais SAS expirarem, o indexador irá falhar com uma mensagem de erro semelhante à 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..

Etapa 2: Crie um índiceStep 2: Create an index

O índice especifica os campos em um documento, atributos e outras construções que modelam a experiência de pesquisa.The index specifies the fields in a document, attributes, and other constructs that shape the search experience.

Veja como criar um índice com um campo content pesquisável para armazenar o texto extraído dos blobs: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=2019-05-06
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 }
      ]
}

Para obter mais informações sobre a criação de índices, consulte Criar ÍndiceFor more on creating indexes, see Create Index

Etapa 3: Criar um indexadorStep 3: Create an indexer

Um indexador conecta uma fonte de dados a um índice de pesquisa de destino e fornece um agendamento para automatizar a atualização de dados.An indexer connects a data source with a target search index, and provides a schedule to automate the data refresh.

Uma vez que o índice e a fonte de dados forem criados, será possível criar o indexador: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=2019-05-06
Content-Type: application/json
api-key: [admin key]

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

Esse indexador será executado a cada duas horas (o intervalo de agendamento é definido como "PT2H").This indexer will run every two hours (schedule interval is set to "PT2H"). Para executar um indexador a cada 30 minutos, defina o intervalo para "PT30M".To run an indexer every 30 minutes, set the interval to "PT30M". O intervalo mais curto com suporte é de 5 minutos.The shortest supported interval is 5 minutes. O agendamento é opcional – se ele for omitido, um indexador será executado apenas uma vez quando for criado.The schedule is optional - if omitted, an indexer runs only once when it's created. No entanto, você pode executar um indexador sob demanda a qualquer momento.However, you can run an indexer on-demand at any time.

Para saber mais sobre a API Criar Indexador, veja Criar indexador.For more details on the Create Indexer API, check out Create Indexer.

Para obter mais informações sobre como definir agendas do indexador, consulte como programar indexadores para o Azure Search.For more information about defining indexer schedules see How to schedule indexers for Azure Search.

Como o Azure Search indexa os blobsHow Azure Search indexes blobs

Dependendo da configuração do indexador, o indexador de blobs pode indexar somente metadados de armazenamento (algo útil quando você está preocupado apenas com os metadados e não precisa indexar o conteúdo dos blobs), metadados de armazenamento e conteúdo ou conteúdo textual e de metadados.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. Por padrão, o indexador extrai os metadados e o conteúdo.By default, the indexer extracts both metadata and content.

Observação

Por padrão, os blobs com conteúdo estruturado, como JSON, CSV e indexados como uma única parte de texto.By default, blobs with structured content such as JSON or CSV are indexed as a single chunk of text. Se você quiser indexar blobs JSON e CSV de maneira estruturada, consulte indexando blobs JSON e indexando blobs CSV para obter mais informações.If you want to index JSON and CSV blobs in a structured way, see Indexing JSON blobs and Indexing CSV blobs for more information.

Um documento composto ou incorporado (como um arquivo ZIP ou um documento do Word com email do Outlook incorporado contendo anexos) também é indexado como um único documento.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.

  • O conteúdo textual do documento é extraído para um campo de cadeia de caracteres chamado content.The textual content of the document is extracted into a string field named content.

Observação

O Azure Search limita quanto texto é extraído dependendo do tipo de preço: 32 mil caracteres na camada gratuita, 64 mil na Básica e 4 milhões nas camadas 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. Um aviso é incluído na resposta de status do indexador para documentos truncados.A warning is included in the indexer status response for truncated documents.

  • As propriedades de metadados especificadas pelo usuário e presentes no blob, se houver alguma, são extraídas literalmente.User-specified metadata properties present on the blob, if any, are extracted verbatim.

  • As propriedades de metadados de blob padrão são extraídas para os seguintes campos:Standard blob metadata properties are extracted into the following fields:

    • metadata_storage_name (Edm.String): o nome do arquivo do blob.metadata_storage_name (Edm.String) - the file name of the blob. Por exemplo, se você tiver um blob /my-container/my-folder/subfolder/resume.pdf, o valor desse campo será 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): o URI completo do blob, incluindo a conta de armazenamento.metadata_storage_path (Edm.String) - the full URI of the blob, including the storage account. Por exemplo, 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): o tipo de conteúdo, conforme especificado pelo código usado para carregar o blob.metadata_storage_content_type (Edm.String) - content type as specified by the code you used to upload the blob. Por exemplo: application/octet-stream.For example, application/octet-stream.
    • metadata_storage_last_modified (Edm.DateTimeOffset): último carimbo de data/hora modificado para o blob.metadata_storage_last_modified (Edm.DateTimeOffset) - last modified timestamp for the blob. O Azure Search usa esse carimbo de data/hora para identificar os blobs alterados, a fim de evitar a reindexação total após a indexação inicial.Azure Search uses this timestamp to identify changed blobs, to avoid reindexing everything after the initial indexing.
    • metadata_storage_size (Edm.Int64): tamanho do blob em bytes.metadata_storage_size (Edm.Int64) - blob size in bytes.
    • metadata_storage_content_md5 (Edm.String): hash MD5 do conteúdo do blob, se estiver disponível.metadata_storage_content_md5 (Edm.String) - MD5 hash of the blob content, if available.
    • metadados_armazenamento_sas_token (EDM. String): um token SAS temporário que pode ser usado por habilidades personalizadas para obter acesso ao blob.metadata_storage_sas_token (Edm.String) - A temporary SAS token that can be used by custom skills to get access to the blob. Esse token não deve ser armazenado para uso posterior, pois ela pode expirar.This token should not be stored for later use as it might expire.
  • As propriedades de metadados específicas a cada formato de documento são extraídas nos campos listados aqui.Metadata properties specific to each document format are extracted into the fields listed here.

Não é necessário definir os campos para todas as propriedades acima em seu índice de pesquisa, basta capturar as propriedades necessárias para seu aplicativo.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.

Observação

Geralmente, os nomes de campo no índice existente serão diferentes dos nomes de campo gerados durante a extração do documento.Often, the field names in your existing index will be different from the field names generated during document extraction. Você pode usar os mapeamentos de campo para mapear os nomes de propriedade fornecidos pelo Azure Search para os nomes de campo em seu índice de pesquisa.You can use field mappings to map the property names provided by Azure Search to the field names in your search index. Você verá um exemplo de uso de mapeamento de campo abaixo.You will see an example of field mappings use below.

Definir chaves de documento e mapeamentos de campoDefining document keys and field mappings

No Azure Search, a chave do documento identifica exclusivamente um documento.In Azure Search, the document key uniquely identifies a document. Cada índice de pesquisa deve ter exatamente um campo de chave do tipo Edm.String.Every search index must have exactly one key field of type Edm.String. O campo de chave é necessário para cada documento adicionado ao índice (é, na verdade, o único campo obrigatório).The key field is required for each document that is being added to the index (it is actually the only required field).

Você deve considerar cuidadosamente qual campo extraído deve ser mapeado para o campo de chave de seu índice.You should carefully consider which extracted field should map to the key field for your index. Os candidatos são:The candidates are:

  • metadata_storage_name: este pode ser um candidato conveniente, mas observe que 1) talvez os nomes não sejam exclusivos, pois você pode ter blobs com o mesmo nome em pastas diferentes, e 2) o nome pode conter caracteres inválidos em chaves de documento, por exemplo, traços.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. Você pode lidar com caracteres inválidos usando a base64Encode função de mapeamento de campo. Se fizer isso, lembre-se de codificar as chaves de documento ao transmiti-las em chamadas à API, como Pesquisa.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. (Por exemplo, em .NET você pode usar o método UrlTokenEncode para essa finalidade).(For example, in .NET you can use the UrlTokenEncode method for that purpose).
  • metadata_storage_path: o uso do caminho completo garante a exclusividade, mas o caminho contém definitivamente caracteres / que são inválidos em uma chave de documento.metadata_storage_path - using the full path ensures uniqueness, but the path definitely contains / characters that are invalid in a document key. Como foi mencionado acima, você tem a opção de codificar as chaves usando a função base64Encode.As above, you have the option of encoding the keys using the base64Encode function.
  • Se nenhuma das opções acima funcionar para você, adicione uma propriedade de metadados personalizada aos blobs.If none of the options above work for you, you can add a custom metadata property to the blobs. No entanto, essa opção exige que seu processo de carregamento de blob adicione essa propriedade de metadados a todos os blobs.This option does, however, require your blob upload process to add that metadata property to all blobs. Como a chave é uma propriedade obrigatória, todos os blobs que não tiverem essa propriedade apresentarão falha na indexação.Since the key is a required property, all blobs that don't have that property will fail to be indexed.

Importante

Se não houver um mapeamento explícito para o campo de chave no índice, o Azure Search usará automaticamente metadata_storage_path como chave e valores da chave de codificação com base-64 (a segunda opção acima).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).

Para este exemplo, vamos escolher o campo metadata_storage_name como a chave do documento.For this example, let's pick the metadata_storage_name field as the document key. Vamos supor também que o índice tenha um campo de chave chamado key e um campo fileSize para armazenamento do tamanho do documento.Let's also assume your index has a key field named key and a field fileSize for storing the document size. Para conectar as coisas conforme o desejado, especifique os seguintes mapeamentos de campo ao criar ou atualizar o indexador: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" }
]

Para unir tudo isso, veja como você pode adicionar mapeamentos de campo e habilitar a codificação das chaves em base-64 para um indexador existente: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=2019-05-06
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" }
  ]
}

Observação

Para saber mais sobre mapeamentos de campo, consulte este artigo.To learn more about field mappings, see this article.

Controlando quais blobs serão indexadosControlling which blobs are indexed

É possível controlar quais blobs são indexados e quais são ignorados.You can control which blobs are indexed, and which are skipped.

Indexe apenas os blobs com extensões de arquivo específicasIndex only the blobs with specific file extensions

Você pode indexar apenas os blobs com as extensões do nome de arquivo especificadas usando o parâmetro de configuração do indexador indexedFileNameExtensions.You can index only the blobs with the file name extensions you specify by using the indexedFileNameExtensions indexer configuration parameter. O valor é uma cadeia de caracteres que contém uma lista separada por vírgulas das extensões de arquivo (com um ponto à esquerda).The value is a string containing a comma-separated list of file extensions (with a leading dot). Por exemplo, para indexar apenas blobs de .PDF e .DOCX, faça o seguinte:For example, to index only the .PDF and .DOCX blobs, do this:

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

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

Excluir blobs com extensões de arquivo específicasExclude blobs with specific file extensions

Você pode excluir os blobs com extensões do nome de arquivo específicas da indexação usando o parâmetro de configuração excludedFileNameExtensions.You can exclude blobs with specific file name extensions from indexing by using the excludedFileNameExtensions configuration parameter. O valor é uma cadeia de caracteres que contém uma lista separada por vírgulas das extensões de arquivo (com um ponto à esquerda).The value is a string containing a comma-separated list of file extensions (with a leading dot). Por exemplo, para indexar todos os blobs, exceto aqueles com as extensões .PNG e .JPEG, faça o seguinte: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=2019-05-06
Content-Type: application/json
api-key: [admin key]

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

Se os parâmetros indexedFileNameExtensions e excludedFileNameExtensions estiverem presentes, o Azure Search primeiro examinará indexedFileNameExtensions, em seguida, excludedFileNameExtensions.If both indexedFileNameExtensions and excludedFileNameExtensions parameters are present, Azure Search first looks at indexedFileNameExtensions, then at excludedFileNameExtensions. Isso significa que, se a mesma extensão de arquivo estiver presente nas duas listas, ela será excluída da indexação.This means that if the same file extension is present in both lists, it will be excluded from indexing.

Controlando quais partes do blob são indexadasControlling which parts of the blob are indexed

Você pode controlar quais partes dos blobs são indexadas usando o parâmetro de configuração dataToExtract.You can control which parts of the blobs are indexed using the dataToExtract configuration parameter. Ele pode usar os seguintes valores:It can take the following values:

Por exemplo, para indexar apenas os metadados de armazenamento, use:For example, to index only the storage metadata, use:

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

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

Usando metadados de blob para controlar como os blobs são indexadosUsing blob metadata to control how blobs are indexed

Os parâmetros de configuração descritos acima se aplicam a todos os blobs.The configuration parameters described above apply to all blobs. Às vezes, você pode desejar controlar como blobs individuais são indexados.Sometimes, you may want to control how individual blobs are indexed. Faça isso adicionando as seguintes propriedades de metadados de blob e valores:You can do this by adding the following blob metadata properties and values:

Nome da propriedadeProperty name Valor da propriedadeProperty value ExplicaçãoExplanation
AzureSearch_SkipAzureSearch_Skip "true""true" Instrui o indexador de blobs a ignorar o blob por completo.Instructs the blob indexer to completely skip the blob. Não há nenhuma tentativa de extração de metadados nem de conteúdo.Neither metadata nor content extraction is attempted. Isso é útil quando um blob específico falha repetidamente e interrompe o processo de indexação.This is useful when a particular blob fails repeatedly and interrupts the indexing process.
AzureSearch_SkipContentAzureSearch_SkipContent "true""true" Isso é equivalente à configuração "dataToExtract" : "allMetadata" descrita acima, no escopo de um blob específico.This is equivalent of "dataToExtract" : "allMetadata" setting described above scoped to a particular blob.

Lidando com problemasDealing with errors

Por padrão, o indexador de blobs é interrompido assim que encontra um blob com um tipo de conteúdo sem suporte (por exemplo, uma imagem).By default, the blob indexer stops as soon as it encounters a blob with an unsupported content type (for example, an image). Evidentemente, você pode usar o parâmetro excludedFileNameExtensions para ignorar alguns tipos de conteúdo.You can of course use the excludedFileNameExtensions parameter to skip certain content types. No entanto, talvez você precise indexar blobs sem conhecer todos os possíveis tipos de conteúdo com antecedência.However, you may need to index blobs without knowing all the possible content types in advance. Para continuar a indexação quando um tipo de conteúdo sem suporte é encontrado, defina o parâmetro de configuração failOnUnsupportedContentType como 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=2019-05-06
Content-Type: application/json
api-key: [admin key]

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

Para alguns blobs, o Azure Search não é capaz de determinar o tipo de conteúdo ou não é capaz de processar um documento com tipo de conteúdo compatível.For some blobs, Azure Search is unable to determine the content type, or unable to process a document of otherwise supported content type. Para ignorar este modo de falha, defina o parâmetro de configuração failOnUnprocessableDocument como false:To ignore this failure mode, set the failOnUnprocessableDocument configuration parameter to false:

  "parameters" : { "configuration" : { "failOnUnprocessableDocument" : false } }

O Azure Search limita o tamanho de blobs que são indexados.Azure Search limits the size of blobs that are indexed. Esses limites são documentados em Limites de serviço no Azure Search.These limits are documented in Service Limits in Azure Search. Por padrão, os blobs superdimensionados são tratados como erros.Oversized blobs are treated as errors by default. No entanto, você ainda pode indexar os metadados de armazenamento de blobs superdimensionados se você definir o parâmetro de configuração indexStorageMetadataOnlyForOversizedDocuments como true:However, you can still index storage metadata of oversized blobs if you set indexStorageMetadataOnlyForOversizedDocuments configuration parameter to true:

"parameters" : { "configuration" : { "indexStorageMetadataOnlyForOversizedDocuments" : true } }

Você também poderá continuar a indexação se ocorrem erros a qualquer momento do processamento, ao analisar blobs ou ao adicionar documentos a um índice.You can also continue indexing if errors happen at any point of processing, either while parsing blobs or while adding documents to an index. Para ignorar um número específico de erros, defina os parâmetros de configuração maxFailedItems e maxFailedItemsPerBatch como os valores desejados.To ignore a specific number of errors, set the maxFailedItems and maxFailedItemsPerBatch configuration parameters to the desired values. Por exemplo:For example:

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

Indexação incremental e detecção de exclusãoIncremental indexing and deletion detection

Quando você configura um indexador de blob para execução em um cronograma, ele reindexa apenas os blobs alterados, conforme determinado pelo carimbo de data/hora LastModified do blob.When you set up a blob indexer to run on a schedule, it reindexes only the changed blobs, as determined by the blob's LastModified timestamp.

Observação

Não é necessário especificar uma política de detecção de alteração, a indexação incremental é habilitada automaticamente para você.You don't have to specify a change detection policy – incremental indexing is enabled for you automatically.

Para dar suporte à exclusão de documentos, use uma abordagem de "exclusão reversível".To support deleting documents, use a "soft delete" approach. Se você excluir os blobs imediatamente, documentos correspondentes não serão removidos do índice de pesquisa.If you delete the blobs outright, corresponding documents will not be removed from the search index. Em vez disso, execute as seguintes etapas:Instead, use the following steps:

  1. Adicione uma propriedade de metadados personalizados ao blob para indicar ao Azure Search que ela é logicamente excluídaAdd a custom metadata property to the blob to indicate to Azure Search that it is logically deleted
  2. Configure uma política de detecção de exclusão reversível na fonte de dadosConfigure a soft deletion detection policy on the data source
  3. Depois que o indexador processar o blob (conforme mostrado pela API do status do indexador), você pode excluir fisicamente o blobOnce the indexer has processed the blob (as shown by the indexer status API), you can physically delete the blob

Por exemplo, a política a seguir considerará que um blob foi excluído se tiver uma propriedade de metadados IsDeleted com o valor 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=2019-05-06
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"
    }
}   

Indexando grandes conjuntos de dadosIndexing large datasets

A indexação de blobs pode ser um processo demorado.Indexing blobs can be a time-consuming process. Nos casos em que você tem milhões de blobs para indexar, é possível acelerar a indexação particionando seus dados e usando vários indexadores para processar os dados em paralelo.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. Veja como você pode configurar isso:Here's how you can set this up:

  • Particione seus dados em vários contêineres de blob ou pastas virtuaisPartition your data into multiple blob containers or virtual folders

  • Configure várias fontes de dados do Azure Search, um por contêiner ou pasta.Set up several Azure Search data sources, one per container or folder. Para apontar para uma pasta de blobs, use o parâmetro 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" }
    }
    
  • Crie um indexador correspondente para cada fonte de dados.Create a corresponding indexer for each data source. Todos os indexadores podem apontar para o mesmo índice de pesquisa de destino.All the indexers can point to the same target search index.

  • Uma unidade de pesquisa em seu serviço pode executar um indexador a qualquer momento.One search unit in your service can run one indexer at any given time. Criar vários indexadores conforme descrito acima será útil somente se eles realmente forem executados em paralelo.Creating multiple indexers as described above is only useful if they actually run in parallel. Para executar vários indexadores em paralelo, escale horizontalmente seu serviço de pesquisa criando um número apropriado de partições e réplicas.To run multiple indexers in parallel, scale out your search service by creating an appropriate number of partitions and replicas. Por exemplo, se o serviço de pesquisa tiver seis unidades de pesquisa (por exemplo, 2 partições x 3 réplicas), seis indexadores poderão ser executados simultaneamente, resultando em um aumento de seis vezes a taxa de transferência da indexação.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. Para saber mais sobre o planejamento de capacidade e colocação em escala, consulte Escalar níveis de recursos para cargas de trabalho de consulta e indexação no Azure Search.To learn more about scaling and capacity planning, see Scale resource levels for query and indexing workloads in Azure Search.

Talvez você queira "montar" documentos de várias fontes em seu índice.You may want to "assemble" documents from multiple sources in your index. Por exemplo, convém mesclar texto de blobs com outros metadados armazenados no Cosmos DB.For example, you may want to merge text from blobs with other metadata stored in Cosmos DB. Você pode até usar a API de indexação por push junto a vários indexadores para criar documentos de pesquisa de várias partes.You can even use the push indexing API together with various indexers to build up search documents from multiple parts.

Para que isso funcione, todos os indexadores e outros componentes precisam concordar com a chave de documento.For this to work, all indexers and other components need to agree on the document key. Para obter um passo a passo detalhado, confira este artigo externo: Combinar documentos com outros dados no Azure Search.For a detailed walk-through, see this external article: Combine documents with other data in Azure Search.

Indexação de texto sem formataçãoIndexing plain text

Se todos os seus blobs contiverem texto sem formatação na mesma codificação, você poderá melhorar significativamente o desempenho de indexação usando o modo de análise de texto.If all your blobs contain plain text in the same encoding, you can significantly improve indexing performance by using text parsing mode. Para usar o modo de análise de texto, defina a propriedade de configuração parsingMode como 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=2019-05-06
Content-Type: application/json
api-key: [admin key]

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

Por padrão, a codificação UTF-8 será assumida.By default, the UTF-8 encoding is assumed. Para especificar uma codificação diferente, use a propriedade de configuração encoding:To specify a different encoding, use the encoding configuration property:

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

Propriedades de metadados específicas ao tipo de conteúdoContent type-specific metadata properties

A tabela a seguir resume o processo executado para cada formato de documento, e descreve as propriedades dos metadados extraídos pelo Azure Search.The following table summarizes processing done for each document format, and describes the metadata properties extracted by Azure Search.

Formato de documento/tipo de conteúdoDocument format / content type Propriedades de metadados específicas do tipo de conteúdoContent-type specific metadata properties Detalhes do processamentoProcessing details
HTML (text/html)HTML (text/html) metadata_content_encoding
metadata_content_type
metadata_language
metadata_description
metadata_keywords
metadata_title
Remoção da marcação HTML e extração do textoStrip HTML markup and extract text
PDF (application/pdf)PDF (application/pdf) metadata_content_type
metadata_language
metadata_author
metadata_title
Extração do texto, incluindo documentos incorporados (excluindo imagens)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
Extração de texto, incluindo documentos incorporadosExtract 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
Extração de texto, incluindo documentos incorporadosExtract 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
Extração de texto, incluindo documentos incorporadosExtract 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
Extração de texto, incluindo documentos incorporadosExtract 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
Extração de texto, incluindo documentos incorporadosExtract 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
Extração de texto, incluindo documentos incorporadosExtract 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
Extração do texto, incluindo anexosExtract text, including attachments
ZIP (application/zip)ZIP (application/zip) metadata_content_type Extração do texto de todos os documentos no arquivoExtract text from all documents in the archive
XML (application/xml)XML (application/xml) metadata_content_type
metadata_content_encoding
Remoção da marcação XML e extração do textoStrip XML markup and extract text
JSON (application/json)JSON (application/json) metadata_content_type
metadata_content_encoding
Extrair textoExtract text
OBSERVAÇÃO: se precisar extrair vários campos de documento de um blob JSON, confira Como indexar blobs JSON para obter detalhesNOTE: 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
Extração do texto, incluindo anexosExtract text, including attachments
RTF (aplicativo/rtf)RTF (application/rtf) metadata_content_type
metadata_author
metadata_character_count
metadata_creation_date
metadata_page_count
metadata_word_count
Extrair textoExtract text
Texto sem formatação (text/plain)Plain text (text/plain) metadata_content_type
metadata_content_encoding
Extrair textoExtract text

Ajude-nos a aprimorar o Azure SearchHelp us make Azure Search better

Caso você tenha solicitações de recursos ou ideias para melhorias, entre em contato conosco pelo site UserVoice.If you have feature requests or ideas for improvements, let us know on our UserVoice site.