MongoDB $text
търсенията не поддържат частично съвпадение. MongoDB позволява заявки за търсене на текст в съдържание на низове с поддръжка за нечувствителност към малки и главни букви, разделители, стоп думи и корени. И термините във вашия низ за търсене по подразбиране са с ИЛИ.
Взимам вашите (много полезни :) примери един по един:
ЕДИН СРОК, ЧАСТИЧЕН
// 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\""}})
НЯКОЛКО УСЛОВИЯ, ЗАВЪРШЕНИ
// 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\""}})
НЯКОЛКО УСЛОВИЯ, ЕДИН ЧАСТИЧЕН
// 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\""}})
НЯКОЛКО УСЛОВИЯ, И ДВАТА ЧАСТИЧНИ
// returns the document because it contains the whole word "Dr"
db.submissions.find({"$text":{"$search":"\"Crai\" \"Dr. Bo\""}})
Имайте предвид, че $search
низът е ...
Така че, ако поне един термин във вашето $search
низ съвпада, тогава MongoDB съвпада с този документ.
За да проверите това поведение, ако редактирате документа си, променяйки Dr. Bob
до DrBob
тогава следните заявки ще върнат не документи:
db.submissions.find({"$text":{"$search":"\"Craig\" \"Dr. Bo\""}})
db.submissions.find({"$text":{"$search":"\"Crai\" \"Dr. Bo\""}})
Те сега не връщат съвпадения, защото Dr
вече не е цяла дума във вашия текстов индекс, защото не е последвана от .
разделител.