Índices de texto em sistemas autogerenciados
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 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.
Visão geral
Para executar queries de texto do Atlas Search em sistemas autogerenciados, você deve ter um índice de texto na sua collection. MongoDB fornece índices de texto para dar suporte a queries de texto do Atlas Search 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 texto do Atlas Search , mas esse índice pode cobrir vários campos.
Compatibilidade
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.
Versões
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.
Criar índice de texto
Importante
Uma collection pode ter no máximo um índice text
.
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.
Para criar um índice text
, use 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 de índice, 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.
Especificar pesos
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 sobre como usar pesos para controlar os resultados de uma pesquisa de texto, consulte Atribuir pesos aos resultados da pesquisa de texto em sistemas autogerenciados.
Índices de texto curinga
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 sobre como usar pesos para controlar os resultados de uma pesquisa de texto, consulte Atribuir pesos aos resultados da pesquisa de texto em sistemas autogerenciados.
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 $text
Atlas Search 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.
Insensibilidade a maiúsculas e minúsculas
O índice da versão 3 text
suporta o comum,C
S
o simples e, para idiomas inglês, o dobramento especial de T
caixa conforme especificado em Unicode Dobramento de maiúsculas e minúsculas do banco de dados 8.0 .
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.
Insensibilidade a diacríticos
Com a versão 3, o índice text
é 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.
Delimitadores de tokenização
Para tokenização, a versão 3 text
índice usa os delimitadores categorizados Dash
emHyphen
, 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»"
.
entrada de índice
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 .
Idiomas suportados e palavras de parada
O MongoDB suporta pesquisa de texto para vários idiomas. Os índices text
eliminam palavras vazias específicas do idioma (por exemplo, em inglês, the
, an
, a
, and
, etc.) e usam derivação simples de sufixo específico do idioma. Para obter uma lista dos idiomas suportados, consulte Idiomas de pesquisa de texto em implementações autogerenciadas.
Se você especificar um valor default_language
de none
, o índice de texto analisará cada palavra no campo, incluindo palavras vazias, e ignorará a derivação do sufixo.
Para especificar um idioma para o índice text
, consulte Especificar o idioma padrão para um índice de texto em sistemas autogerenciados.
sparse
Propriedade
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.
Restrições
Um índice de texto por collection
Uma collection pode ter no máximo um índice text
.
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.
Pesquisar e dicas de texto
Se uma query incluir uma expressão $text
, não sera possível usar hint()
para especificar o índice a ser utilizado na query.
pesquisar de texto e frases
Se a string $search
de uma operação $text
incluir uma frase e termos individuais, $text
corresponderá somente aos documentos que incluem a frase.
Você não pode usar o operador $text
com várias frases.
Índice e classificação de texto
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.
Índice composto
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 de texto composto incluir chaves que precedem a chave do índice de texto, para usar
$text
, o predicado de query deverá incluir condições de correspondência de igualdade nas chaves anteriores.Ao criar um índice composto
text
, todas as chaves de índicetext
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 de índices de texto verificadas em sistemas autogerenciados.
Solte um índice de texto
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
.
Opção de agrupamento
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.
Requisitos de armazenamento e custos de desempenho
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.
Suporte à pesquisa de texto
O índice text
suporta $text
operações de query. Para exemplos de pesquisa de texto, consulte o $text reference page
. Para obter exemplos de operações $text
em pipelines de agregação , consulte $text no aggregation pipeline sobre sistemas autogerenciados.