MongoDB $text
sökningar stöder inte partiell matchning. MongoDB tillåter textsökningar på stränginnehåll med stöd för skiftlägesokänslighet, avgränsare, stoppord och stemming. Och termerna i din söksträng är, som standard, ELLER-redigerade.
Ta dina (mycket användbara :) exempel ett efter ett:
ENDA TERM, DELVIS
// 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\""}})
FLERA VILLKOR, KOMPLETTA
// 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\""}})
FLERA VILLKOR, EN PARTIELL
// 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\""}})
FLERA VILLKOR, BÅDA DELVIS
// returns the document because it contains the whole word "Dr"
db.submissions.find({"$text":{"$search":"\"Crai\" \"Dr. Bo\""}})
Tänk på att $search
sträng är ...
Så, om minst en term i din $search
sträng matchar så matchar MongoDB det dokumentet.
För att verifiera detta beteende, om du redigerar ditt dokument genom att ändra Dr. Bob
till DrBob
då kommer följande frågor att returnera nej dokument:
db.submissions.find({"$text":{"$search":"\"Craig\" \"Dr. Bo\""}})
db.submissions.find({"$text":{"$search":"\"Crai\" \"Dr. Bo\""}})
Dessa returnerar nu inga matchningar eftersom Dr
är inte längre ett helt ord i ditt textindex eftersom det inte följs av .
avgränsare.