Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Menu Docs
Página inicial do Docs
/ /

Criar um índice de texto curinga em implantações autogerenciadas

Observação

MongoDB Search oferece funcionalidades avançadas de pesquisa de texto completo, incluindo indexação dinâmica configurável. Recomendamos usar índices de pesquisa MongoDB em vez de índices de texto.

Você pode criar um índice de texto que contenha todos os campos do documento com dados de string em uma coleção. Esses índices de texto são chamados de índices de texto curinga. Os índices de texto curinga suportam $text queries em campos desconhecidos, arbitrários ou gerados dinamicamente.

Para criar um índice de texto curinga, defina a chave de índice para o especificador curinga ($**) e defina o valor do índice para text:

db.<collection>.createIndex( { "$**": "text" } )

Os índices de texto curinga são distintos dos índices curinga. Os índices de texto curinga suportam queries que usam o operador $text , enquanto os índices curinga não.

Observação

$text fornece recursos de query de texto para sistemas autogerenciados (não Atlas). Para dados hospedados no MongoDB, o MongoDB também oferece uma solução de query de texto completo aprimorada, MongoDB Search.

Depois de criar um índice de texto curinga, quando você insere ou atualiza documentos, o índice é atualizado para incluir qualquer novo valor de campo de string. Como resultado, os índices de texto curinga impactam negativamente o desempenho de inserções e atualizações.

Utilize índices de texto curinga somente quando os campos que você deseja indexar forem desconhecidos ou possam mudar. Os índices de texto curinga não funcionam tão bem quanto os índices de texto direcionados em campos específicos. Se sua collection contiver nomes de campo arbitrários que impeçam índices direcionados, considere remodelar seu esquema para ter nomes de campo consistentes. Para saber mais sobre índices direcionados, consulte Crie índices para oferecer suporte a queries.

Criar uma coleção blog com os seguintes documentos:

db.blog.insertMany( [
{
_id: 1,
content: "This morning I had a cup of coffee.",
about: "beverage",
keywords: [ "coffee" ]
},
{
_id: 2,
content: "Who likes chocolate ice cream for dessert?",
about: "food",
keywords: [ "poll" ]
},
{
_id: 3,
content: "My favorite flavors are strawberry and coffee",
about: "ice cream",
keywords: [ "food", "dessert" ]
}
] )

Crie um índice de texto coringa na collection blog :

db.blog.createIndex( { "$**": "text" } )

O índice de texto curinga suporta $text consultas em todos os campos na coleção. Considere as seguintes queries:

Consulte a coleção blog para a string coffee:

db.blog.find( { $text: { $search: "coffee" } } )

Saída:

[
{
_id: 1,
content: 'This morning I had a cup of coffee.',
about: 'beverage',
keywords: [ 'coffee' ]
},
{
_id: 3,
content: 'My favorite flavors are strawberry and coffee',
about: 'ice cream',
keywords: [ 'food', 'dessert' ]
}
]

A query anterior retorna todos os documentos que contêm a string coffee em qualquer campo.

Consulte a coleção blog para documentos que contenham a string poll ou coffee:

db.blog.find( { $text: { $search: "poll coffee" } } )

Saída:

[
{
_id: 1,
content: 'This morning I had a cup of coffee.',
about: 'beverage',
keywords: [ 'coffee' ]
},
{
_id: 3,
content: 'My favorite flavors are strawberry and coffee',
about: 'ice cream',
keywords: [ 'food', 'dessert' ]
},
{
_id: 2,
content: 'Who likes chocolate ice cream for dessert?',
about: 'food',
keywords: [ 'poll' ]
}
]

A query anterior retorna documentos que contenham a string poll ou coffee em qualquer campo.

Consulte a coleção blog para documentos que contenham a string exata chocolate ice cream:

db.blog.find( { $text: { $search: "\"chocolate ice cream\"" } } )

Saída:

[
{
_id: 2,
content: 'Who likes chocolate ice cream for dessert?',
about: 'food',
keywords: [ 'poll' ]
}
]

A query anterior retorna documentos que contêm a string exata chocolate ice cream em qualquer campo.

Voltar

Criar um índice de texto

Nesta página