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.