Partilhar via


Pesquisar e consultar com índices de texto no Azure Cosmos DB para MongoDB vCore

APLICA-SE A: MongoDB vCore

Um dos principais recursos que o Azure Cosmos DB para MongoDB vCore fornece é a indexação de texto, que permite a pesquisa e consulta eficientes de dados baseados em texto. O serviço implementa índices de texto da versão 2 . A versão 2 suporta sensibilidade a maiúsculas e minúsculas, mas não a sensibilidade diacrítica.

Os índices de texto no Azure Cosmos DB para MongoDB são estruturas de dados especiais que otimizam consultas baseadas em texto, tornando-as mais rápidas e eficientes. Eles são projetados para lidar com conteúdo textual, como documentos, artigos, comentários ou quaisquer outros dados com muito texto. Os índices de texto usam técnicas como tokenização, derivação e palavras de parada para criar um índice que melhora o desempenho de pesquisas baseadas em texto.

Pré-requisitos

Definir um índice de texto

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

  • 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 createIndex método com a text opção para criar um índice de texto no title campo.

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

    Nota

    Embora você possa definir apenas um índice de texto por coleção, o Azure Cosmos DB para MongoDB vCore permite criar índices de texto em vários campos para permitir que você realize pesquisas de texto em diferentes campos em seus documentos.

  2. Opcionalmente, crie um índice para dar suporte à pesquisa nos title campos e content .

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

Configurar opções de índice de texto

Os índices de texto no Azure Cosmos DB para MongoDB vêm com várias opções para personalizar seu comportamento. Por exemplo, você pode especificar o idioma para análise de texto, definir pesos para priorizar determinados campos e configurar pesquisas que não diferenciam maiúsculas de 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 nos campos e content com suporte ao title idioma inglês. Além disso, atribua pesos mais altos ao title campo 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 a campos individuais no índice. Estes pesos representam a importância ou relevância de cada campo na pesquisa. O Azure Cosmos DB para MongoDB vCore calcula uma pontuação e pesos atribuídos para 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 title campos e content . Atribua um peso de 2 ao campo "título" e um peso de 1 ao campo "conteúdo".

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

    Nota

    Quando um cliente realiza uma consulta de pesquisa de texto com o termo "Cosmos DB", a pontuação para cada documento da coleção será 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 maior peso.

Executar uma pesquisa de texto usando um índice de texto

Uma vez que o índice de texto é criado, você pode realizar pesquisas de texto usando o operador "texto" em suas consultas. O operador de texto usa uma cadeia de caracteres de pesquisa e a faz a correspondência com o índice de texto para localizar documentos relevantes.

  1. Realize uma pesquisa de texto para a frase Cosmos DB.

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

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

Descartar um índice de texto

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

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

    db.products.dropIndex({ title: "text" })
    
  2. Opcionalmente, solte um índice de texto especificando o nome exclusivo 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.
  • Os índices de texto suportam pesquisas de texto simples e não fornecem recursos avançados de pesquisa, como pesquisas de expressões regulares.
  • Não há suporte para Hint() em combinação com uma consulta usando $text expressão.
  • As operações de classificação não podem usar a ordenação 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