sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB:¿diferencia entre el índice en el campo de texto y el índice de texto?

Las dos opciones de índice son muy diferentes.

  • Cuando crea un índice regular en un campo de cadena, indexa el valor completo en la cadena. Principalmente útil para cadenas de una sola palabra (como un nombre de usuario para inicios de sesión) donde puede coincidir exactamente.

  • Un índice de texto, por otro lado, tokenizará y detendrá el contenido del campo. Por lo tanto, dividirá la cadena en palabras individuales o tokens, y los reducirá aún más a sus raíces para que las variantes de la misma palabra coincidan ("hablar" coincidiendo con "hablar", "hablar" y "hablar", por ejemplo, como "hablar" es una raíz de los tres). Mayormente útil para texto verdadero (oraciones, párrafos, etc.).

    Búsqueda de texto

    La búsqueda de texto admite la búsqueda de contenido de cadenas en documentos de una colección. MongoDB proporciona el $text operador para realizar búsquedas de texto en consultas y en canalizaciones de agregación.

    El proceso de búsqueda 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.
    

    El $text el operador puede buscar palabras y frases. La consulta coincide con las palabras derivadas completas. Por ejemplo, si un campo de documento contiene la palabra arándano, una búsqueda del término azul no coincidirá con el documento. Sin embargo, una búsqueda en blueberry o blueberries coincidirá.

  • $regex las búsquedas se pueden usar con índices regulares en campos de cadena, para proporcionar algunas coincidencias de patrones y búsquedas con comodines. No es un usuario terriblemente efectivo de índices, pero utilizará índices donde pueda:

    Si existe un índice para el campo, entonces MongoDB compara la expresión regular con los valores del índice, lo que puede ser más rápido que un escaneo de colección. Puede ocurrir una mayor optimización si la expresión regular es una "expresión de prefijo", lo que significa que todas las coincidencias potenciales comienzan con la misma cadena. Esto permite que MongoDB construya un "rango" a partir de ese prefijo y solo coincida con los valores del índice que se encuentran dentro de ese rango.

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

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