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
- Um cluster vCore do Azure Cosmos DB for MongoDB existente.
- Caso não tenha uma assinatura do Azure, crie uma conta gratuitamente.
- Se você tiver uma assinatura existente do Azure, crie um cluster VCore do Azure Cosmos DB for MongoDB.
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
}
Use o método
createIndex
com a opçãotext
para criar um índice de texto no campotitle
.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.
Opcionalmente, crie um índice para dar suporte à pesquisa nos campos
title
econtent
.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:
Crie um índice para dar suporte à pesquisa nos campos
title
econtent
, com suporte à língua inglesa. Além disso, atribua pesos mais altos ao campotitle
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.
Crie um índice para dar suporte à pesquisa nos campos
title
econtent
. 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.
Faça uma pesquisa de texto pela frase
Cosmos DB
.db.products.find( { $text: { $search: "Cosmos DB" } } )
Opcionalmente, use o operador de projeção
$meta
junto com o campotextScore
em uma consulta para exibir o pesodb.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.
Remova um índice de texto especificando explicitamente a chave.
db.products.dropIndex({ title: "text" })
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.