Compartilhar via


Pesquisar e consultar com índices de texto no Azure Cosmos DB for MongoDB (vCore).

APLICA-SE AO: MongoDB vCore

Um dos principais recursos que o Azure Cosmos DB for MongoDB vCore fornece é a indexação de texto, que permite pesquisar e consultar dados baseados em texto com eficiência. O serviço implementa índices de texto na versão 2. A versão 2 suporta a diferenciação de letras maiúsculas e minúsculas e minúsculas, mas não sensibilidade a diacríticos.

Os índices de texto no Azure Cosmos DB for MongoDB são estruturas de dados especiais que otimizam as consultas baseadas em texto, tornando-as mais rápidas e mais eficientes. Essas ferramentas foram projetadas para lidar com conteúdos textuais, como documentos, artigos, comentários ou qualquer outro dado com muito texto. Os índices de texto usam técnicas como geração de tokens, palavras cognatas e palavras irrelevantes para criar um índice que aprimora o desempenho das pesquisas baseadas em texto.

Pré-requisitos

Definir um índice de texto

Para simplificar, vamos considerar um exemplo de aplicativo de blog com a configuração a seguir:

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

Este aplicativo de exemplo armazena artigos como documentos com a seguinte estrutura:

{
  "_id": ObjectId("617a34e7a867530bff1b2346"),
  "title": "Azure Cosmos DB - A Game Changer",
  "content": "Azure Cosmos DB is a globally distributed, multi-model database service.",
  "author": "John Doe",
  "category": "Technology",
  "published": true
}
  1. Use 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 seja possível definir apenas um índice de texto por coleção, o Azure Cosmos DB for MongoDB vCore permite que você crie índices de texto em vários campos para realizar pesquisas de texto em diferentes campos dos seus documentos.

  2. Opcionalmente, crie um índice para dar suporte à pesquisa 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 Cosmos DB for MongoDB vêm com várias opções para personalizar o comportamento. Por exemplo, você pode especificar o idioma para a análise de texto, definir pesos para priorizar determinados campos e configurar pesquisas que não diferenciem maiúsculas de minúsculas. Aqui temos um exemplo de criação de um índice de texto com opções:

  1. Crie um índice para dar suporte à pesquisa nos campos title e content, com suporte à língua inglesa. Além disso, atribua pesos mais altos ao campo title para priorizá-lo nos resultados da pesquisa.

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

Pesos em índices de texto

Ao criar um índice de texto, você pode atribuir pesos diferentes em campos individuais. Esses pesos representam a importância ou relevância de cada campo na pesquisa. O Azure Cosmos DB for MongoDB vCore 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 dar suporte à pesquisa nos campos title e content. Atribua peso 2 ao campo “título” e peso 1 ao campo “conteúdo”.

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

    Observação

    Quando um cliente realiza uma consulta de pesquisa de texto com o termo "Cosmos DB", a pontuação de cada documento na coleção é calculada com base na presença e frequência do termo nos campos "título" e "conteúdo", com maior importância dada ao campo “título” devido ao seu peso mais alto.

Realizar uma pesquisa de texto usando um índice de texto

Após o índice de texto ter sido criado, você poderá executar pesquisas de texto usando o operador "text" nas suas consultas. O operador de texto usa uma cadeia de caracteres de pesquisa e a equipara ao índice de texto para localizar documentos relevantes.

  1. Faça uma pesquisa de texto pela frase Cosmos DB.

    db.products.find(
        { $text: { $search: "Cosmos DB" } }
    )
    
  2. Opcionalmente, use o operador de projeção $meta junto com o campo textScore em uma consulta para exibir o peso

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

Como remover um índice de texto

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

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

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

    db.products.dropIndex("title_text")
    

Limitações de índice de texto

  • Somente um índice de texto pode ser configurado em uma coleção.
  • Os índices de texto dão suporte a pesquisas de texto simples e não fornecem recursos de pesquisa avançados, como pesquisas com expressões regulares.
  • Hint() não é compatível com consultas que usam a expressão $text.
  • As operações de classificação não podem usar a ordem do índice de texto no MongoDB.
  • Os índices de texto podem ser relativamente grandes, consumindo um espaço de armazenamento significativo em comparação com outros tipos de índice.

Próxima etapa