Você pode criar um índice de texto que contenha todos os campo do documento com dados de string em uma collection. Esses índices de texto são chamados de índices de texto curinga. Os índices de texto curinga oferecem suporte àpesquisa de texto em campos desconhecidos, arbitrários ou gerados dinamicamente.
Para criar um índice de texto curinga, defina a chave do índice para o especificador curinga ($**) e defina o valor do índice como text:
db.<collection>.createIndex( { "$**": "text" } )
Sobre esta tarefa
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 Atlas, o MongoDB oferece uma solução aprimorada de query de texto completo, Atlas 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.
Antes de começar
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" ] } ] )
Procedimento
Crie um índice de texto coringa na collection blog :
db.blog.createIndex( { "$**": "text" } )
Resultados
O índice de texto curinga suporta queries de pesquisa de texto em todos os campos da coleção. Considere as seguintes queries:
Pesquisar uma única palavra
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.
Pesquisar vários termos
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.
Pesquisar uma string exata
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.
Saiba mais
Para saber como controlar a classificação dos resultados da query de texto, consulte Atribuir pesos aos resultados da pesquisa de texto em sistemas autogerenciados.
É possível incluir um índice de texto curinga como parte de um índice de texto composto. Para saber mais sobre índices de texto compostos, consulte Criar um índice de texto composto.
Para ver exemplos de query de pesquisa, consulte
$text.Observação
$textfornece recursos de query de texto para implantações autogerenciadas (não Atlas). Para dados hospedados no MongoDB Atlas, o MongoDB oferece uma solução aprimorada de query de texto completo, Atlas Search.Para saber mais sobre as propriedades do índice de texto, como a sensibilidade a maiúsculas e minúsculas, consulte Propriedades do índice de texto em implementações autogerenciadas.