Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Índices de texto

Nesta página

  • Visão geral
  • Compatibilidade
  • Versões
  • Criar índice de texto
  • Insensibilidade a maiúsculas e minúsculas
  • Insensibilidade a diacríticos
  • Delimitadores de tokenização
  • entrada de índice
  • Idiomas suportados e palavras de parada
  • sparse Propriedade
  • Restrições
  • pesquisar de texto e frases
  • Requisitos de armazenamento e custos de desempenho
  • Suporte à pesquisa de texto

Observação

Esta página descreve os recursos de pesquisa de texto para sistemas autogerenciados (não Atlas). Para dados hospedados no MongoDB Atlas, o MongoDB oferece uma solução aprimorada de pesquisa de texto completo, oAtlas Search.

Para executar consultas de queries de texto em sistemas autogerenciados, você deve ter um índice de texto na sua collection. O MongoDB fornece índices de texto para dar suporte à pesquisa de queries no conteúdo da string. Os índices de texto podem incluir qualquer campo cujo valor seja uma string ou uma array de elementos da string. Uma collection só pode ter um índice de pesquisa de texto, mas esse índice pode abranger vários campos.

Você pode utilizar índices de texto para implantações hospedadas no MongoDB Atlas.

Para saber mais sobre como gerenciar índices para distribuições hospedadas no MongoDB Atlas, consulte Criar, visualizar, descartar e ocultar índices.

O índice de texto está disponível em três versões. Por padrão, o MongoDB usa a versão 3 com novos índices de texto.

Para substituir o padrão e utilizar uma versão mais antiga, utilize a opção textIndexVersion ao criar o índice.

Importante

Uma collection pode ter no máximo um índice text .

Atlas Search (disponível no MongoDB Atlas) oferece suporte a vários índices de pesquisa de texto completo em uma única collection. Para saber mais, consulte a documentação da Pesquisa do Atlas .

Para criar um índice text , utilize o método db.collection.createIndex() . Para indexar um campo que contém uma string ou uma array de elementos de string, inclua o campo e especifique a string literal "text" no documento indexado, como no exemplo a seguir:

db.reviews.createIndex( { comments: "text" } )

Você pode indexar vários campos para o índice text . O exemplo seguinte cria um índice text nos campos subject e comments:

db.reviews.createIndex(
{
subject: "text",
comments: "text"
}
)

Um índice composto pode incluir chaves de índice text em combinação com chaves de índice ascendentes/descendentes. Para obter mais informações, consulte Índice composto.

Para eliminar um índice text , use o nome do índice. Consulte Usar o nome do índice para descartar um índice text para obter mais informações.

Para um índice text , o peso de um campo indexado denota a importância do campo em relação aos outros campos indexados em termos de pontuação de pesquisa de texto.

Para cada campo indexado no documento, o MongoDB multiplica o número de correspondências pelo peso e soma os resultados. Usando essa soma, o MongoDB calcula a pontuação do documento. Consulte o operador $meta para obter detalhes sobre como retornar e classificar por pontuações de texto.

O peso padrão é 1 para os campos indexados. Para ajustar os pesos dos campos indexados, inclua a opção weights no método db.collection.createIndex() .

Para obter mais informações usando pesos para controlar os resultados de uma pesquisa de texto, consulte Controlar resultados de pesquisa com pesos.

Observação

Os Índices de Texto Curinga são diferentes dos Índices Curinga. Os índices curinga não suportam query usando o operador $text .

Embora os Índices de Texto Curinga e os Índices Curinga compartilhem o padrão de campo curinga $** , eles são tipos de índice distintos. Somente índices de texto curinga suportam o operador $text .

Ao criar um índice text em múltiplos campos, você também pode utilizar o especificador curinga ($**). Com um índice de texto curinga, o MongoDB indexa todos os campos que contêm dados de string para cada documento na collection. O exemplo a seguir cria um índice de texto utilizando o especificador curinga:

db.collection.createIndex( { "$**": "text" } )

Este índice permite pesquisa de texto em todos os campos com conteúdo de string. Esse índice pode ser útil com dados altamente não estruturados se não estiver claro quais campos incluir no índice de texto ou para queries ad-hoc.

Os índices de texto curinga são índices text em vários campos. Dessa forma, você pode atribuir pesos a campos específicos durante a criação do índice para controlar a classificação dos resultados. Para obter mais informações usando pesos para controlar os resultados de uma pesquisa de texto, consulte Controlar resultados de pesquisa com pesos.

Os índices de texto curinga, como em todos os índices de texto, podem fazer parte de índices compostos. Por exemplo, o seguinte cria um índice composto no campo a , bem como o especificador curinga:

db.collection.createIndex( { a: 1, "$**": "text" } )

Como acontece com todos os índices de texto compostos, como o a precede a chave do índice de texto, para executar uma pesquisa $text com esse índice, o predicado da query deve incluir uma condição de correspondência de igualdade a. Para obter informações sobre índices de texto compostos, consulte Índices de texto compostos.

O 3 text índice versão suporta o comum C, simples S e, para idiomas Turcos, as T dobraduras maiúsculas e minúsculas especiais conforme especificado no Unicode 8.0 Dobramento de caixa do banco de dados de caracteres.

As dobras de maiúsculas e minúsculas expandem a insensibilidade a entre maiúsculas e minúsculas do índice text para incluir caracteres com diacríticos, como é e É, e caracteres de alfabetos não latinos, como "é" e "é" no alfabeto cirílico .

A versão 3 do índice text também é insensível a diacríticos. Como tal, o índice também não distingue entre é, É, e e E.

As versões anteriores do índice text diferenciam maiúsculas de minúsculas apenas para [A-z] ; ou seja, diferencia maiúsculas de minúsculas apenas para caracteres latinos não diacríticos. Para todos os outros caracteres, as versões anteriores do índice de texto os tratam como distintos.

Com a versão 3, text o índice é insensível a diacríticos. Ou seja, o índice não faz distinção entre caracteres que contêm diacríticos e sua contraparte sem sinais, como é, ê e e. Mais especificamente, o text índice remove os caracteres categorizados como diacríticos no Unicode 8.0 Lista de acessórios do banco de dados de caracteres.

A versão 3 do índice text também diferencia maiúsculas de minúsculas para caracteres com diacríticos. Como tal, o índice também não distingue entre é, É, e e E.

As versões anteriores do índice text tratam caracteres com diacríticos como distintos.

Para tokenização, o 3 text índice usa os delimitadores categorizados em Dash, Hyphen, Pattern_Syntax, Quotation_Mark, Terminal_Punctuation e White_Space no Unicode 8.0 Lista de acessórios do banco de dados de caracteres.

Por exemplo, se for fornecida uma string "Il a dit qu'il «était le meilleur joueur du monde»", o índice text tratará «, » e espaços como delimitadores.

As versões anteriores do índice tratam « como parte do termo "«était" e » como parte do termo "monde»".

text o índice tokeniza e determina os termos nos campos indexados para as entradas do índice. O índice text armazena uma entrada de índice para cada termo derivado único em cada campo indexado para cada documento na coleção. O índice usa derivação simples de sufixo específico do idioma .

O MongoDB suporta pesquisa de texto para vários idiomas. Os índices text eliminam palavras de parada específicas do idioma (por exemplo, em inglês, the, an, a, and, etc.) e usam derivação simples de sufixo específica do idioma. Para obter uma lista dos idiomas suportados, consulte Idiomas de pesquisa de texto.

Se você especificar um valor de linguagem de "none", o índice text usará tokenização simples, sem lista de palavras de interrupção e sem derivação.

Para especificar um idioma para o índice text , consulte Especificar um idioma para o índice de texto.

text os índices são sempre escassos e ignoram a opção esparsa . Se um documento não tiver um campo de índice text (ou o campo for null ou uma array vazia), o MongoDB não adicionará uma entrada para o documento ao índice text . Para inserções, o MongoDB insere o documento, mas não adiciona ao índice text .

Para um índice composto que inclui uma chave de índice text junto com chaves de outros tipos, somente o campo de índice text determina se o índice faz referência a um documento. As outras chaves não determinam se o índice faz referência aos documentos ou não.

Uma collection pode ter no máximo um índice text .

Atlas Search (disponível no MongoDB Atlas) oferece suporte a vários índices de pesquisa de texto completo em uma única collection. Para saber mais, consulte a documentação da Pesquisa do Atlas .

Se uma query incluir uma expressão $text , você não poderá usar hint() para especificar o índice a ser usado na query.

Se a string $search de uma operação $text incluir uma frase e termos individuais, a pesquisa de texto corresponderá somente aos documentos que incluem a frase.

Você não pode usar o operador $text para pesquisar diversas frases.

As operações de classificação não podem obter a ordem de classificação de um índice text , mesmo de um índice de texto composto; ou seja, operações de classificação não podem usar a ordenação no índice de texto.

Um índice composto pode incluir uma chave de índice text em combinação com chaves de índice ascendentes/descendentes. No entanto, esses índices compostos têm as seguintes restrições:

  • Um text índice composto não pode incluir nenhum outro tipo de índice especial, como campos de índice geoespacial ou de várias chaves .

  • Se o índice composto text incluir chaves que precedem a chave de índice text , para executar uma pesquisa $text , o predicado da query deverá incluir condições de correspondência de igualdade nas chaves anteriores.

  • Ao criar um índice composto text , todas as chaves de índice text devem ser listadas adjacentemente no documento de especificação do índice.

Consulte também Índice de texto e classificação para obter limitações adicionais.

Para obter um exemplo de um índice de texto composto, consulte Limitar o número de entradas verificadas.

Para eliminar um índice text , passe o nome do índice para o método db.collection.dropIndex() . Para obter o nome do índice, execute o método db.collection.getIndexes() .

Para obter informações sobre o esquema de nomenclatura padrão para índices text , bem como sobrepor o nome padrão, consulte Especificar nome para o índice text .

text os índices suportam apenas comparação binária simples e não suportam agrupamento.

Para criar um índice text em uma collection que tenha um agrupamento não simples, você deve especificar explicitamente {collation: {locale: "simple"} } ao criar o índice.

text índices têm os seguintes requisitos de armazenamento e custos de desempenho:

  • text os índices podem ser grandes. Eles contêm uma entrada de índice para cada palavra única pós-processamento (stemming) em cada campo indexado para cada documento inserido.

  • Construir um índice text é muito semelhante a construir um grande índice de múltiplas chaves e levará mais tempo do que construir um índice simples ordenado (scalar) nos mesmos dados.

  • Ao criar um índice text grande em uma collection existente, verifique se você tem um limite suficientemente alto de descritores de arquivo abertos. Consulte as configurações recomendadas.

  • text os índices terão impacto na taxa de transferência de inserção porque o MongoDB deve adicionar uma entrada de índice para cada palavra única pós-processamento (stemming) em cada campo indexado de cada novo documento de origem.

  • Além disso, os índices text não armazenam frases ou informações sobre a proximidade de palavras nos documentos. Como resultado, a query de frase será executada com muito mais eficiência quando toda a collection caber na RAM.

O índice text suporta operações de query do $text . Para exemplos de pesquisa de texto, consulte o $text reference page. Para obter exemplos de operações do $text em pipelines de agregação, consulte pesquisar de texto no pipeline de agregação.

← Limites de índice de várias chaves