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

¿Puede una búsqueda de $ texto realizar una coincidencia parcial?

MongoDB $text las búsquedas no admiten coincidencias parciales. MongoDB permite consultas de búsqueda de texto en contenido de cadena con soporte para mayúsculas y minúsculas, delimitadores, palabras vacías y lematización. Y los términos en su cadena de búsqueda son, de forma predeterminada, con OR.

Tomando sus (muy útiles :) ejemplos uno por uno:

TÉRMINO ÚNICO, PARCIAL

// returns nothing because there is no world word with the value `Crai` in your
// text index and there is no whole word for which `Crai` is a recognised stem
db.submissions.find({"$text":{"$search":"\"Crai\""}})

TÉRMINOS MÚLTIPLES, COMPLETOS

// returns the document because it contains all of these words
// note in the text index Dr. Bob is not a single entry since "." is a delimiter
db.submissions.find({"$text":{"$search":"\"Craig\" \"Dr. Bob\""}})

MÚLTIPLES TÉRMINOS, UNO PARCIAL

// returns the document because it contains the whole word "Craig" and it 
// contains the whole word "Dr" 
db.submissions.find({"$text":{"$search":"\"Craig\" \"Dr. Bo\""}})

TÉRMINOS MÚLTIPLES, AMBOS PARCIALES

// returns the document because it contains the whole word "Dr"
db.submissions.find({"$text":{"$search":"\"Crai\" \"Dr. Bo\""}})

Tenga en cuenta que el $search la cadena es ...

Entonces, si al menos un término en su $search cadena coincide, luego MongoDB coincide con ese documento.

Para verificar este comportamiento, si edita su documento cambiando Dr. Bob a DrBob entonces las siguientes consultas devolverán no documentos:

db.submissions.find({"$text":{"$search":"\"Craig\" \"Dr. Bo\""}})
db.submissions.find({"$text":{"$search":"\"Crai\" \"Dr. Bo\""}})

Estos ahora no devuelven coincidencias porque Dr ya no es una palabra completa en su índice de texto porque no está seguida por . delimitador.