MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB - Diferença entre índice no campo de texto e índice de texto?


As duas opções de índice são muito diferentes.

  • Quando você cria um índice regular em um campo de string, ele indexa o valor inteiro na string. Principalmente útil para cadeias de palavras únicas (como um nome de usuário para logins) onde você pode corresponder exatamente.

  • Um índice de texto, por outro lado, tokenizará e conterá o conteúdo do campo. Portanto, ele quebrará a string em palavras ou tokens individuais e os reduzirá ainda mais aos seus radicais para que as variantes da mesma palavra correspondam ("talk" correspondendo a "talks", "talked" e "talking", por exemplo, como "talk" é uma haste de todos os três). Principalmente útil para texto verdadeiro (frases, parágrafos, etc).

    Pesquisa de texto

    A pesquisa de texto suporta a pesquisa de conteúdo de string em documentos de uma coleção. O MongoDB fornece o $text operador para realizar pesquisas de texto em consultas e em pipelines de agregação.

    O processo de pesquisa de texto:
    tokenizes and stems the search term(s) during both the index creation and the text command execution.
    assigns a score to each document that contains the search term in the indexed fields. The score determines the relevance of a document to a given search query.
    

    O $text operador pode pesquisar palavras e frases. A consulta corresponde às palavras derivadas completas. Por exemplo, se um campo de documento contiver a palavra blueberry, uma pesquisa pelo termo blue não corresponderá ao documento. No entanto, uma pesquisa por mirtilo ou mirtilo corresponderá.

  • $regex pesquisas podem ser usadas com índices regulares em campos de string, para fornecer alguma correspondência de padrões e pesquisa de curingas. Não é um usuário muito eficaz de índices, mas usará índices onde puder:

    Se existir um índice para o campo, o MongoDB fará a correspondência da expressão regular com os valores no índice, o que pode ser mais rápido do que uma varredura de coleção. Uma otimização adicional pode ocorrer se a expressão regular for uma “expressão de prefixo”, o que significa que todas as correspondências em potencial começam com a mesma string. Isso permite que o MongoDB construa um “intervalo” a partir desse prefixo e apenas corresponda aos valores do índice que se enquadram nesse intervalo.

http://docs.mongodb.org/manual/core/index-text/

http://docs.mongodb.org/manual/reference/operator/query/regex/