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.