MongoDB $text
les recherches ne prennent pas en charge la correspondance partielle. MongoDB permet les requêtes de recherche de texte sur le contenu des chaînes avec prise en charge de l'insensibilité à la casse, des délimiteurs, des mots vides et de la radicalisation. Et les termes de votre chaîne de recherche sont, par défaut, OR.
En prenant vos exemples (très utiles :) un par un :
DURÉE UNIQUE, PARTIELLE
// 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\""}})
TERMES MULTIPLES, COMPLETS
// 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\""}})
PLUSIEURS CONDITIONS, UNE PARTIELLE
// 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\""}})
PLUSIEURS TERMES, LES DEUX PARTIELS
// returns the document because it contains the whole word "Dr"
db.submissions.find({"$text":{"$search":"\"Crai\" \"Dr. Bo\""}})
Gardez à l'esprit que le $search
la chaîne est ...
Donc, si au moins un terme dans votre $search
chaîne correspond alors MongoDB correspond à ce document.
Pour vérifier ce comportement, si vous éditez votre document en changeant Dr. Bob
à DrBob
alors les requêtes suivantes renverront non documents :
db.submissions.find({"$text":{"$search":"\"Craig\" \"Dr. Bo\""}})
db.submissions.find({"$text":{"$search":"\"Crai\" \"Dr. Bo\""}})
Celles-ci ne renvoient désormais aucune correspondance car Dr
n'est plus un mot entier dans votre index de texte car il n'est pas suivi du .
délimiteur.