Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Criar um índice de texto

Nesta página

  • Sobre esta tarefa
  • Antes de começar
  • Procedimentos
  • Criar um índice de texto de campo único
  • Criar um índice de texto composto

Observação

Esta página descreve as funcionalidades de consulta de texto para implantações autogerenciadas (não Atlas). Para dados hospedados no MongoDB Atlas, o MongoDB oferece uma solução aprimorada de consulta de texto completo, Atlas Search.

Os índices de texto suportam pesquisa de query de texto em campos que contêm conteúdo de string. Os índices de texto melhoram o desempenho ao pesquisar palavras ou frases específicas no conteúdo da string.

Para criar um índice de texto, use o método db.collection.createIndex() . Para indexar um campo que contém uma string ou uma array de elementos de string, especifique a string "text" como a chave do índice:

db.<collection>.createIndex(
{
<field1>: "text",
<field2>: "text",
...
}
)
  • Uma coleção pode ter no máximo um índice de texto.

    O Atlas Search (disponível no MongoDB Atlas) suporta vários índices de pesquisa com texto completo em uma única coleção. Para saber mais, consulte a documentação do Atlas Search.

  • Você pode indexar vários campos em um único índice de texto. Um índice de texto pode conter até 32 campos. Para ver um exemplo, consulte Criar um índice de texto composto.

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" ]
}
] )

Os exemplos a seguir mostram como:

Crie um índice de texto no campo content :

db.blog.createIndex( { "content": "text" } )

O índice oferece suporte a queries de pesquisa de texto no campo content. Por exemplo, a query a seguir retorna documentos onde o campo content contém 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' ]
}
]

O índice { "content": "text" } inclui apenas o campo content e não retorna correspondências em campos não indexados. Por exemplo, a seguinte query pesquisa a coleção blog para a string food:

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

A query anterior não retorna nenhum documento. Embora a string food apareça nos documentos _id: 2 e _id: 3, ela aparece nos campos about e keywords respectivamente. Os campos about e keywords não são incluídos no índice de texto, portanto, não afetam os resultados da query de pesquisa de texto.

Observação

Antes de criar o índice neste exemplo, você deve descartar todos os índices de texto existentes na coleção blog .

Crie um índice de texto composto nos campos about e keywords na coleção blog:

db.blog.createIndex(
{
"about": "text",
"keywords": "text"
}
)

O índice suporta queries de pesquisa de texto nos campos about e keywords . Por exemplo, a query a seguir retorna documentos em que a string food aparece no campo about ou keywords:

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

Saída:

[
{
_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' ]
}
]
← Índices de texto