MongoDB $text
wyszukiwania nie obsługują częściowego dopasowania. MongoDB umożliwia wyszukiwanie tekstów w treści ciągu z obsługą niewrażliwości na wielkość liter, ograniczników, słów stopowych i rdzenia. A terminy w wyszukiwanym ciągu są domyślnie pisane OR.
Biorąc swoje (bardzo przydatne :) przykłady jeden po drugim:
JEDNORAZOWY, CZĘŚCIOWY
// 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\""}})
WIELE WARUNKÓW, KOMPLETNE
// 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\""}})
WIELE TERMINÓW, JEDEN CZĘŚCIOWY
// 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\""}})
WIELE TERMINÓW, ZARÓWNO CZĘŚCIOWE
// returns the document because it contains the whole word "Dr"
db.submissions.find({"$text":{"$search":"\"Crai\" \"Dr. Bo\""}})
Pamiętaj, że $search
ciąg to ...
Tak więc, jeśli co najmniej jeden termin w Twoim $search
string pasuje, a MongoDB dopasowuje ten dokument.
Aby zweryfikować to zachowanie, jeśli edytujesz dokument zmieniając Dr. Bob
do DrBob
wtedy następujące zapytania zwrócą nie dokumenty:
db.submissions.find({"$text":{"$search":"\"Craig\" \"Dr. Bo\""}})
db.submissions.find({"$text":{"$search":"\"Crai\" \"Dr. Bo\""}})
Teraz nie zwracają żadnych dopasowań, ponieważ Dr
nie jest już całym słowem w indeksie tekstowym, ponieważ nie następuje po nim .
ogranicznik.