Menu Docs
Página inicial do Docs
/ /

Criar um índice de texto em sistemas autogerenciados

Observação

Esta página descreve os 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 , e uma solução de pesquisa vetorial, Atlas Vector Search.

Os índices de texto oferecem suporte a queries de pesquisa de texto em campos que contêm conteúdo de string. Os índices de texto melhoram o desempenho ao pesquisar palavras específicas ou strings de várias palavras 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 somente 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' ]
}
]

Voltar

Text Indexes

Nesta página