Tomalaks Beschreibung, wie die Textindizierung funktioniert, ist korrekt, aber Sie können tatsächlich einen Textindex für eine exakte Phrasenübereinstimmung mit einer Phrase mit einem Sonderzeichen verwenden:
> db.test.drop()
> db.test.insert({ "_id" : 0, "t" : "hey look at all this #text" })
> db.test.insert({ "_id" : 1, "t" : "text is the best" })
> db.test.ensureIndex({ "t" : "text" })
> db.test.count({ "$text" : { "$search" : "text" } })
2
> db.test.count({ "$text" : { "$search" : "#text" } })
2
> db.test.find({ "$text" : { "$search" : "\"#text\"" } })
{ "_id" : 0, "t" : "hey look at all this #text" }
Genaue Übereinstimmungen von Ausdrücken werden durch das Einschließen des Ausdrucks in doppelte Anführungszeichen angezeigt, die in der Shell wie "\"#text\""
maskiert werden müssen .
Textindizes sind größer als normale Indizes, aber wenn Sie viele exakte Wortgruppenübereinstimmungen ohne Berücksichtigung der Groß-/Kleinschreibung durchführen, können sie eine bessere Option sein als ein Standardindex, da sie eine bessere Leistung erbringen. Zum Beispiel auf einem Feld t
mit einem Index { "t" : 1 }
, ein exakt passender regulärer Ausdruck
> db.test.find({ "t" : /#text/ })
führt einen vollständigen Index-Scan durch. Die analoge (aber nicht äquivalente) Textabfrage
> db.test.find({ "$text" : { "$search" : "\"#text\"" } })
verwendet den Textindex, um Dokumente zu finden, die den Begriff "text"
enthalten , und scannen Sie dann alle diese Dokumente, um festzustellen, ob sie den vollständigen Ausdruck "#text
enthalten ".
Seien Sie vorsichtig, da bei Textindizes die Groß-/Kleinschreibung nicht beachtet wird. Fortsetzung des obigen Beispiels:
> db.test.insert({ "_id" : 2, "t" : "Never seen so much #TEXT" })
> db.test.find({ "t" : /#text/ })
{ "_id" : 0, "t" : "hey look at all this #text" }
> db.test.find({ "$text" : { "$search" : "\"#text\"" } })
{ "_id" : 0, "t" : "hey look at all this #text" }
{ "_id" : 2, "t" : "Never seen so much #TEXT" }