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

Limitar o número de entradas de índices de texto verificadas

Nesta página

  • Sobre esta tarefa
  • Procedimento
  • Resultados
  • Ver número de documentos examinados
  • Saiba mais

Se você realizar queries de pesquisa de texto em um grande conjunto de dados, um índice de texto de campo único poderá verificar um grande número de entradas para retornar resultados, o que pode resultar em queries lentas.

Para melhorar o desempenho da query, você pode criar umíndice de texto composto e incluir uma correspondência de igualdade nas suas queries de pesquisa de texto. Se o índice composto contiver o campo usado em sua correspondência de igualdade, o índice verificará menos entradas e retornará resultados mais rapidamente.

Neste exemplo, um gerente de loja faz query de uma collection inventory que contém estes documentos:

db.inventory.insertMany( [
{ _id: 1, department: "tech", description: "lime green computer" },
{ _id: 2, department: "tech", description: "wireless red mouse" },
{ _id: 3, department: "kitchen", description: "green placemat" },
{ _id: 4, department: "kitchen", description: "red peeler" },
{ _id: 5, department: "food", description: "green apple" },
{ _id: 6, department: "food", description: "red potato" }
] )

O gerente realiza query de pesquisa de texto para itens dentro de um departamento específico.

Um índice de texto composto nos campos department e description limita as chaves de índice digitalizadas somente a documentos dentro do department especificado. O índice de texto composto fornece melhor desempenho em comparação com um índice de texto de campo único no campo description .

Crie um índice composto na coleção inventory que contém os seguintes campos:

  • Uma chave de índice ascendente ou descendente no campo department

  • Uma chave de índice text no campo description

db.inventory.createIndex(
{
department: 1,
description: "text"
}
)

Depois de criar o índice composto, as queries de pesquisa de texto verificam apenas documentos que correspondam a uma condição de igualdade especificada no campo department.

Por exemplo, a seguinte query verifica documentos com department igual a kitchen onde o campo description contém a string green:

db.inventory.find( { department: "kitchen", $text: { $search: "green" } } )

Saída:

[ { _id: 3, department: 'kitchen', description: 'green placemat' } ]

Para ver quantos documentos foram digitalizados para retornar a consulta, visualize o executionStats da consulta:

db.inventory.find(
{
department: "kitchen", $text: { $search: "green" }
}
).explain("executionStats")

O número de chaves de índice examinadas é indicado no campo totalKeysExamined . Queries que examinam mais chaves de índice geralmente levam mais tempo para serem concluídas.

Com o índice composto em department e description, a query examina somente uma chave de índice. Há apenas um documento na coleção em que department está kitchen e o description contém a string green.

No entanto, se a query usasse um índice de texto de campo único somente no campo description, a query examinaria três chaves de índice. Há três documentos na coleção em que o campo description contém a string green.

Em uma coleção pequena como a usada no exemplo anterior, não há uma diferença perceptível no desempenho entre índices de texto composto e índices de campo único. No entanto, em coleções maiores, ter mais digitalizações de entrada de índice pode prejudicar visivelmente o desempenho. Para obter o melhor desempenho, crie índices de texto que limitem o número de entradas de índice digitalizadas para melhor se adequarem às suas correspondências de igualdade.

← Atribuir pesos aos resultados da pesquisa de texto