MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Una ricerca $testo può eseguire una corrispondenza parziale

MongoDB $text le ricerche non supportano la corrispondenza parziale. MongoDB consente query di ricerca di testo sul contenuto di stringhe con supporto per la distinzione tra maiuscole e minuscole, delimitatori, stop word e stemming. E i termini nella stringa di ricerca sono, per impostazione predefinita, OR.

Prendendo i tuoi esempi (molto utili :) uno per uno:

DURATA SINGOLA, PARZIALE

// 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\""}})

MULTI TERMINI, COMPLETI

// 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\""}})

MULTI TERMINI, UNO PARZIALE

// 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\""}})

MULTI TERMINI, ENTRAMBI PARZIALI

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

Tieni presente che il $search la stringa è ...

Quindi, se almeno un termine nel tuo $search string corrisponde a MongoDB corrisponde a quel documento.

Per verificare questo comportamento, se modifichi il tuo documento cambiando Dr. Bob a DrBob le seguenti query restituiranno no documenti:

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

Questi ora non restituiscono corrispondenze perché Dr non è più una parola intera nel tuo indice di testo perché non è seguita dal . delimitatore.