Partilhar via


Pesquisa e consulta com índices de texto no Azure DocumentDB

Uma das principais funcionalidades que o Azure DocumentDB oferece é a indexação de texto, que permite uma pesquisa e consulta eficientes de dados baseados em texto. O serviço implementa índices de texto versão 2 . A versão 2 suporta sensibilidade a maiúsculas, mas não sensibilidade ao diacrítico.

Os índices de texto no Azure DocumentDB são estruturas de dados especiais que otimizam consultas baseadas em texto, tornando-as mais rápidas e eficientes. São concebidos para lidar com conteúdo textual como documentos, artigos, comentários ou qualquer outro dado com muito texto. Os índices de texto utilizam técnicas como tokenização, stemming e palavras de parada para criar um índice que melhora o desempenho das pesquisas baseadas em texto.

Pré-requisitos

  • Uma assinatura do Azure

    • Se você não tiver uma assinatura do Azure, crie uma conta gratuita
  • Um cluster do Azure DocumentDB existente

Defina um índice de texto

Para simplificar, consideremos um exemplo de uma aplicação de blog com a seguinte configuração:

  • Nome da base de dados: cosmicworks
  • Nome da coleção: products

Esta aplicação de exemplo armazena artigos como documentos com a seguinte estrutura:

{
  "_id": ObjectId("617a34e7a867530bff1b2346"),
  "title": "Azure DocumentDB - A Game Changer",
  "content": "Azure DocumentDB is a globally distributed, multi-model database service.",
  "author": "John Doe",
  "category": "Technology",
  "published": true
}
  1. Utilize o método createIndex com a opção text para criar um índice de texto no campo title.

    use cosmicworks;
    
    db.products.createIndex({ title: "text" })
    

    Observação

    Embora possa definir apenas um índice de texto por coleção, o Azure DocumentDB permite-lhe criar índices de texto em múltiplos campos para realizar pesquisas de texto em diferentes campos dos seus documentos.

  2. Opcionalmente, crie um índice para suportar a pesquisa tanto nos campos title e content.

    db.products.createIndex({ title: "text", content: "text" })
    

Configurar opções de índice de texto

Os índices de texto no Azure DocumentDB vêm com várias opções para personalizar o seu comportamento. Por exemplo, pode especificar o idioma para análise de texto, definir pesos para priorizar certos campos e configurar pesquisas que não fazem distinção entre maiúsculas e minúsculas. Aqui está um exemplo de criação de um índice de texto com opções:

  1. Crie um índice para suportar a pesquisa tanto no campo title como no campo content com suporte ao idioma inglês. Além disso, atribui pesos mais altos ao title campo para o priorizar nos resultados de pesquisa.

    db.products.createIndex(
        { title: "text", content: "text" },
        { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false }
    )
    

Pesos nos índices de texto

Ao criar um índice de texto, pode atribuir diferentes pesos a campos individuais no índice. Estes pesos representam a importância ou relevância de cada campo na pesquisa. O Azure DocumentDB calcula uma pontuação e atribui pesos a cada documento com base nos termos de pesquisa ao executar uma consulta de pesquisa de texto. A pontuação representa a relevância do documento para a consulta de pesquisa.

  1. Crie um índice para suportar a pesquisa tanto no campo title como no campo content. Atribui um peso de 2 ao campo "título" e um peso de 1 ao campo de "conteúdo".

    db.products.createIndex(
    { title: "text", content: "text" },
    { weights: { title: 2, content: 1 } }
    )
    

    Observação

    Quando um cliente realiza uma pesquisa de texto com o termo "DocumentDB", a pontuação de cada documento da coleção será calculada com base na presença e frequência do termo tanto nos campos "título" como no "conteúdo", dando maior importância ao campo "título" devido ao seu maior peso.

Realize uma pesquisa de texto usando um índice de texto

Depois de criado o índice de texto, pode realizar pesquisas de texto usando o operador "texto" nas suas consultas. O operador de texto pega numa string de pesquisa e compara-a com o índice de texto para encontrar documentos relevantes.

  1. Faça uma pesquisa de texto pela expressão DocumentDB.

    db.products.find(
        { $text: { $search: "DocumentDB" } }
    )
    
  2. Opcionalmente, use o operador de projeção $meta junto com o campo textScore numa consulta para ver o peso.

    db.products.find(
        { $text: { $search: "DocumentDB" } },
        { score: { $meta: "textScore" } }
    )
    

Eliminar um índice de texto

Para remover um índice de texto no MongoDB, pode usar o método dropIndex() na coleção e especificar a chave de índice ou o nome do índice de texto que pretende remover.

  1. Elimine um índice de texto especificando explicitamente a chave.

    db.products.dropIndex({ title: "text" })
    
  2. Opcionalmente, remova um índice de texto especificando o nome único gerado automaticamente.

    db.products.dropIndex("title_text")
    

Limitações do índice de texto

  • Apenas um índice de texto pode ser definido em uma coleção.
  • O Hint() não é suportado em combinação com uma consulta usando $text expressão.
  • As operações de ordenação não podem usar a ordem do índice de texto no MongoDB.
  • Os índices de texto podem ser relativamente grandes, consumindo espaço de armazenamento significativo em comparação com outros tipos de índice.

Próximo passo