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
- Um cluster vCore existente do Azure Cosmos DB para MongoDB.
- Se você não tiver uma assinatura do Azure, crie uma conta gratuitamente.
- Se você tiver uma assinatura existente do Azure, crie um novo cluster vCore do Azure Cosmos DB para MongoDB.
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
}
Use o
createIndex
método com atext
opção para criar um índice de texto notitle
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.
Opcionalmente, crie um índice para dar suporte à pesquisa nos
title
campos econtent
.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:
Crie um índice para suportar a pesquisa nos campos e
content
com suporte aotitle
idioma inglês. Além disso, atribua pesos mais altos aotitle
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.
Crie um índice para dar suporte à pesquisa nos
title
campos econtent
. 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.
Realize uma pesquisa de texto para a frase
Cosmos DB
.db.products.find( { $text: { $search: "Cosmos DB" } } )
Opcionalmente, use o
$meta
operador de projeção junto com otextScore
campo em uma consulta para ver o pesodb.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.
Solte um índice de texto especificando explicitamente a chave.
db.products.dropIndex({ title: "text" })
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.