Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
Pesquisa de IA do Azure está disponível por meio do portal Azure, APIs REST e SDKs do Azure. Ele também sustenta o IQ do Foundry, a camada de conhecimento gerenciado que transforma o conteúdo da empresa em bases de conhecimento reutilizáveis e com reconhecimento de permissão para agentes no portal do Microsoft Foundry.
Aplica-se a: indexadores de blob, indexadores de arquivos (versão prévia)
Por padrão, um indexador trata o conteúdo de um blob ou arquivo como um único documento de pesquisa. Se você quiser uma representação mais granular em um índice de pesquisa, poderá definir valores parsingMode para criar vários documentos de pesquisa de um blob ou arquivo. Os valores de parsingMode que resultam em vários documentos de pesquisa incluem delimitedText (para CSV) jsonArray ou jsonLines (para JSON) ou markdown com o submodo oneToMany para markdown.
Quando você usa qualquer um desses modos de análise, os novos documentos de pesquisa que surgem devem ter chaves de documento exclusivas e surge um problema na determinação de de onde esse valor vem. O blob principal tem pelo menos um valor único na forma de metadata_storage_path property, mas se ele contribuir com esse valor para mais de um documento de busca, a chave deixará de ser única no índice.
Para resolver esse problema, o indexador de blob gera um AzureSearch_DocumentKey que identifica exclusivamente cada documento de pesquisa filho criado por um blob pai. Este artigo explica como esse recurso funciona.
Chave de documento de um para muitos
Uma chave de documento identifica exclusivamente cada documento em um índice. Quando nenhum modo de análise é especificado e, se não houver nenhum mapeamento de campo explícito na definição do indexador para a chave do documento de pesquisa, o indexador de blob mapeia automaticamente como metadata_storage_path property a chave do documento. Esse mapeamento padrão garante que cada blob apareça como um documento de pesquisa distinto. Ele também elimina a necessidade de você criar manualmente esse mapeamento de campo. Normalmente, campos com nomes e tipos idênticos são os únicos mapeados automaticamente.
Em um cenário de documento de pesquisa um para muitos, uma chave de documento implícita baseada em metadata_storage_path property não é possível. Como alternativa, o Pesquisa de IA do Azure pode gerar uma chave de documento para cada entidade individual extraída de um blob. O sistema gera uma chave chamada AzureSearch_DocumentKey e a adiciona a cada documento de pesquisa. O indexador controla os "muitos documentos" criados a partir de cada blob e pode direcionar atualizações para o índice de pesquisa quando os dados de origem são alterados ao longo do tempo.
Por padrão, quando nenhum mapeamento de campo explícito para o campo de índice de chave é especificado, o AzureSearch_DocumentKey é mapeado para ele usando a função de mapeamento de campo base64Encode.
Example
Suponha uma definição de índice com os seguintes campos:
idtemperaturepressuretimestamp
E o seu contêiner de blobs tem blobs com a seguinte estrutura:
Blob1.json
{ "temperature": 100, "pressure": 100, "timestamp": "2024-02-13T00:00:00Z" }
{ "temperature" : 33, "pressure" : 30, "timestamp": "2024-02-14T00:00:00Z" }
Blob2.json
{ "temperature": 1, "pressure": 1, "timestamp": "2023-01-12T00:00:00Z" }
{ "temperature" : 120, "pressure" : 3, "timestamp": "2022-05-11T00:00:00Z" }
Quando você cria um indexador e define o parsingMode como jsonLines - sem especificar nenhum mapeamento de campo explícito para o campo de chave, o mapeamento a seguir é aplicado implicitamente.
{
"sourceFieldName" : "AzureSearch_DocumentKey",
"targetFieldName": "id",
"mappingFunction": { "name" : "base64Encode" }
}
Essa configuração resulta em chaves de documento desambiguadas, semelhantes à ilustração a seguir (ID codificada em base64 abreviada para brevidade).
| ID | temperatura | pressão | carimbo de data/hora |
|---|---|---|---|
| aHR0... YjEuanNvbjsx | 100 | 100 | 2024-02-13T00:00:00Z |
| aHR0 ... YjEuanNvbjsy | 33 | 30 | 2024-02-14T00:00:00Z |
| aHR0... YjIuanNvbjsx | 1 | 1 | 2023-01-12T00:00:00Z |
| aHR0... YjIuanNvbjsy | 120 | 3 | 2022-05-11T00:00:00Z |
Mapeamento de campo personalizado para o campo de chave de índice
Supondo a mesma definição de índice do exemplo anterior, suponha que o contêiner de blob tenha blobs com a seguinte estrutura:
Blob1.json
recordid, temperature, pressure, timestamp
1, 100, 100,"2024-02-13T00:00:00Z"
2, 33, 30,"2024-02-14T00:00:00Z"
Blob2.json
recordid, temperature, pressure, timestamp
1, 1, 1,"20123-01-12T00:00:00Z"
2, 120, 3,"2022-05-11T00:00:00Z"
Quando você cria um indexador com delimitedTextparsingMode, pode parecer natural configurar uma função de mapeamento de campo para o campo de chave da seguinte maneira:
{
"sourceFieldName" : "recordid",
"targetFieldName": "id"
}
No entanto, esse mapeamento não faz com que quatro documentos apareçam no índice porque o campo AzureSearch_DocumentKey para o campo de índice de chave nos modos de análise "um para muitos".
Se você quiser configurar um mapeamento de campo explícito, verifique se o sourceField é distinto para cada entidade individual em todos os blobs.
Observação
A abordagem utilizada por AzureSearch_DocumentKey para garantir a exclusividade de cada entidade extraída está sujeita a alterações; portanto, não se deve confiar em seu valor para as necessidades do seu aplicativo.
Especificar o campo de chave de índice em seus dados
Supondo que a mesma definição de índice do exemplo anterior e parsingMode seja definido jsonLines sem especificar nenhum mapeamento de campo explícito para que os mapeamentos se pareçam com o primeiro exemplo, suponha que seu contêiner de blob tenha blobs com a seguinte estrutura:
Blob1.json
id, temperature, pressure, timestamp
1, 100, 100,"2024-02-13T00:00:00Z"
2, 33, 30,"2024-02-14T00:00:00Z"
Blob2.json
id, temperature, pressure, timestamp
1, 1, 1,"2023-01-12T00:00:00Z"
2, 120, 3,"2022-05-11T00:00:00Z"
Cada documento contém o id campo, que é definido como o key campo no índice. Nessa situação, o sistema gera um campo de chave de for the document, but it isn't used as the "key." Instead, the value of theIDfield is mapped to the AzureSearch_DocumentKey exclusivo.
Semelhante ao exemplo anterior, esse mapeamento não faz com que quatro documentos apareçam no índice porque o id campo não é exclusivo entre os blobs. Quando essa situação ocorre, qualquer entrada JSON que especifica uma id causa uma mesclagem com o documento existente em vez de carregar uma nova. Então, o índice reflete o estado atual da entrada com o especificado id.
Limitações
Quando uma entrada de documento no índice é criada a partir de uma linha em um arquivo, conforme explicado neste artigo, excluir essa linha do arquivo não remove automaticamente a entrada correspondente do índice. Para excluir a entrada do documento, você deve enviar manualmente uma solicitação de exclusão para o índice usando a operação de exclusão da API REST.
Próximas etapas
Se você ainda não estiver familiarizado com a estrutura básica e o fluxo de trabalho da indexação de blobs, examine primeiro a indexação do Armazenamento de Blobs do Azure com o Pesquisa de IA do Azure . Para obter mais informações sobre modos de análise para diferentes tipos de conteúdo de blob, examine os artigos a seguir.