Die beiden Indexoptionen sind sehr unterschiedlich.
-
Wenn Sie einen regulären Index für ein Zeichenfolgenfeld erstellen, wird der gesamte Wert in der Zeichenfolge indiziert. Am nützlichsten für einzelne Wortfolgen (wie ein Benutzername für Anmeldungen), bei denen Sie genau übereinstimmen können.
-
Ein Textindex hingegen wird den Inhalt des Feldes tokenisieren und stammeln. Daher wird die Zeichenfolge in einzelne Wörter oder Token zerlegt und weiter auf ihre Stämme reduziert, sodass Varianten desselben Wortes übereinstimmen (z. ist ein Stamm von allen dreien). Meist nützlich für echten Text (Sätze, Absätze usw.).
Textsuche
Die Textsuche unterstützt die Suche nach Zeichenfolgeninhalten in Dokumenten einer Sammlung. MongoDB stellt den
$text
bereit Operator zum Durchführen von Textsuchen in Abfragen und in Aggregationspipelines.Der Textsuchprozess:
tokenizes and stems the search term(s) during both the index creation and the text command execution. assigns a score to each document that contains the search term in the indexed fields. The score determines the relevance of a document to a given search query.
Der
$text
Operator kann nach Wörtern und Phrasen suchen. Die Abfrage stimmt mit den vollständigen Wortstämmen überein. Wenn beispielsweise ein Dokumentfeld das Wort Blaubeere enthält, wird eine Suche nach dem Begriff Blau nicht mit dem Dokument übereinstimmen. Eine Suche nach Blaubeere oder Blaubeeren wird jedoch übereinstimmen. -
$regex
Suchen können mit regulären Indizes für Zeichenfolgenfelder verwendet werden, um einen gewissen Mustervergleich und eine Suche mit Platzhaltern bereitzustellen. Kein sehr effektiver Benutzer von Indizes, aber es wird Indizes verwenden, wo es kann:Wenn für das Feld ein Index vorhanden ist, gleicht MongoDB den regulären Ausdruck mit den Werten im Index ab, was schneller sein kann als ein Sammlungsscan. Eine weitere Optimierung kann erfolgen, wenn der reguläre Ausdruck ein „Präfixausdruck“ ist, was bedeutet, dass alle potenziellen Übereinstimmungen mit derselben Zeichenfolge beginnen. Dadurch kann MongoDB einen „Bereich“ aus diesem Präfix erstellen und nur mit den Werten aus dem Index abgleichen, die in diesen Bereich fallen.
http://docs.mongodb.org/manual/core/index-text/
http://docs.mongodb.org/manual/reference/operator/query/regex/