Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Menu Docs
Página inicial do Docs
/ /

Limitar entradas de índice de texto verificadas em implantações autogerenciadas

Observação

MongoDB oferece uma solução aprimorada de pesquisa de texto completo, MongoDB Search, e uma solução de pesquisa vetorial, MongoDB Vector Search. Recomendamos usar índices do MongoDB Search ou índices do MongoDB Vector Search em vez de índices de texto.

Se você executar query $text em um conjunto de dados grande, um índice de texto de campo único poderá verificar um grande número de entradas para retornar resultados, o que pode resultar em query 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 $text. Se o índice composto contiver o campo usado em sua correspondência de igualdade, o índice verificará menos entradas e retornará os resultados mais rapidamente.

Neste exemplo, o gerente de uma loja consulta uma coleção 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 $text queries 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 $text verificam somente 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.

Voltar

Atribuir pesos aos resultados da query $text

Nesta página