Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Textsuche mit Amazon DocumentDB durchführen
Mit der nativen Volltextsuchfunktion von Amazon DocumentDB können Sie mithilfe von speziellen Textindizes eine Textsuche in großen Textdatensätzen durchführen. Dieser Abschnitt beschreibt die Funktionen der Textindex-Funktion und enthält Schritte zur Erstellung und Verwendung von Textindizes in Amazon DocumentDB. Einschränkungen bei der Textsuche sind ebenfalls aufgeführt.
Themen
Unterstützte Funktionen
Die Amazon DocumentDB-Textsuche unterstützt die folgenden MongoDB-API-kompatiblen Funktionen:
Erstellen Sie Textindizes für ein einzelnes Feld.
Erstellen Sie zusammengesetzte Textindizes, die mehr als ein Textfeld enthalten.
Führen Sie Suchen mit einem Wort oder mehreren Wörtern durch.
Kontrollieren Sie die Suchergebnisse mithilfe von Gewichtungen.
Sortieren Sie die Suchergebnisse nach Punktzahl.
Verwenden Sie den Textindex in der Aggregationspipeline.
Suchen Sie nach einer exakten Phrase.
Verwenden des Amazon DocumentDB-Textindex
Um einen Textindex für ein Feld zu erstellen, das Zeichenkettendaten enthält, geben Sie die Zeichenfolge „Text“ wie unten dargestellt an:
Index für ein einzelnes Feld:
db.test.createIndex({"comments": "text"})
Dieser Index unterstützt Textsuchabfragen im Zeichenfolgenfeld „Kommentare“ in der angegebenen Sammlung.
Erstellen Sie einen zusammengesetzten Textindex für mehr als ein Zeichenkettenfeld:
db.test.createIndex({"comments": "text", "title":"text"})
Dieser Index unterstützt Textsuchabfragen in den Zeichenfolgenfeldern „Kommentare“ und „Titel“ in der angegebenen Sammlung. Sie können bis zu 30 Felder angeben, wenn Sie einen zusammengesetzten Textindex erstellen. Nach der Erstellung werden mit Ihren Textsuchabfragen alle indizierten Felder abgefragt.
Anmerkung
Für jede Sammlung ist nur ein Textindex zulässig.
Einen Textindex in einer Amazon DocumentDB-Sammlung auflisten
Sie können ihn für Ihre Sammlung verwendengetIndexes()
, um Indizes, einschließlich Textindizes, zu identifizieren und zu beschreiben, wie im folgenden Beispiel gezeigt:
rs0:PRIMARY> db.test.getIndexes() [ { "v" : 4, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.test" }, { "v" : 1, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "contents_text", "ns" : "test.test", "default_language" : "english", "weights" : { "comments" : 1 }, "textIndexVersion" : 1 } ]
Sobald Sie einen Index erstellt haben, beginnen Sie mit dem Einfügen von Daten in Ihre Amazon DocumentDB-Sammlung.
db.test.insertMany([{"_id": 1, "star_rating": 4, "comments": "apple is red"}, {"_id": 2, "star_rating": 5, "comments": "pie is delicious"}, {"_id": 3, "star_rating": 3, "comments": "apples, oranges - healthy fruit"}, {"_id": 4, "star_rating": 2, "comments": "bake the apple pie in the oven"}, {"_id": 5, "star_rating": 5, "comments": "interesting couch"}, {"_id": 6, "star_rating": 5, "comments": "interested in couch for sale, year 2022"}])
Textsuchabfragen ausführen
Führen Sie eine Textsuchabfrage mit einem Wort aus
Sie müssen die $search
Operatoren $text
und verwenden, um Textsuchen durchzuführen. Im folgenden Beispiel werden alle Dokumente zurückgegeben, in denen Ihr indiziertes Textfeld die Zeichenfolge „apple“ oder „apple“ in anderen Formaten wie „apples“ enthält:
db.test.find({$text: {$search: "apple"}})
Ausgabe:
Die Ausgabe dieses Befehls sieht ungefähr so aus:
{ "_id" : 1, "star_rating" : 4, "comments" : "apple is red" }
{ "_id" : 3, "star_rating" : 3, "comments" : "apples, oranges - healthy fruit" }
{ "_id" : 4, "star_rating" : 2, "comments" : "bake the apple pie in the oven" }
Führen Sie eine Textsuche mit mehreren Wörtern durch
Sie können auch Textsuchen mit mehreren Wörtern in Ihren Amazon DocumentDB DocumentDB-Daten durchführen. Der folgende Befehl gibt Dokumente zurück, deren indiziertes Textfeld „Apfel“ oder „Kuchen“ enthält:
db.test.find({$text: {$search: "apple pie"}})
Ausgabe:
Die Ausgabe dieses Befehls sieht ungefähr so aus:
{ "_id" : 1, "star_rating" : 4, "comments" : "apple is red" }
{ "_id" : 2, "star_rating" : 5, "comments" : "pie is delicious" }
{ "_id" : 3, "star_rating" : 3, "comments" : "apples, oranges - healthy fruit" }
{ "_id" : 4, "star_rating" : 2, "comments" : "bake the apple pie in the oven" }
Führen Sie eine Textsuche mit mehreren Wörtern durch
Verwenden Sie für eine Phrasensuche mit mehreren Wörtern dieses Beispiel:
db.test.find({$text: {$search: "\"apple pie\""}})
Ausgabe:
Der obige Befehl gibt Dokumente zurück, deren indiziertes Textfeld genau den Ausdruck „Apfelkuchen“ enthält. Die Ausgabe dieses Befehls sieht ungefähr so aus:
{ "_id" : 4, "star_rating" : 2, "comments" : "bake the apple pie in the oven" }
Führen Sie eine Textsuche mit Filtern aus
Sie können die Textsuche auch mit anderen Abfrageoperatoren kombinieren, um Ergebnisse nach zusätzlichen Kriterien zu filtern:
db.test.find({$and: [{star_rating: 5}, {$text: {$search: "interest"}}]})
Ausgabe:
Der obige Befehl gibt Dokumente mit einem indizierten Textfeld zurück, das jede Form von „Interesse“ und ein „Star-Rating“ gleich 5 enthält. Die Ausgabe dieses Befehls sieht ungefähr so aus:
{ "_id" : 5, "star_rating" : 5, "comments" : "interesting couch" }
{ "_id" : 6, "star_rating" : 5, "comments" : "interested in couch for sale, year 2022" }
Beschränken Sie die Anzahl der Dokumente, die bei einer Textsuche zurückgegeben werden
Sie können die Anzahl der zurückgegebenen Dokumente einschränken, indem Sie Folgendes verwendenlimit
:
db.test.find({$and: [{star_rating: 5}, {$text: {$search: "couch"}}]}).limit(1)
Ausgabe:
Der obige Befehl gibt ein Ergebnis zurück, das dem Filter entspricht:
{ "_id" : 5, "star_rating" : 5, "comments" : "interesting couch" }
Sortiert die Ergebnisse nach der Textpunktzahl
Im folgenden Beispiel werden die Ergebnisse der Textsuche nach der Textpunktzahl sortiert:
db.test.find({$text: {$search: "apple"}}, {score: {$meta: "textScore"}}).sort({score: {$meta: "textScore"}})
Ausgabe:
Der obige Befehl gibt Dokumente zurück, deren indiziertes Textfeld „apple“ oder „apple“ in anderen Formaten wie „apples“ enthält, und sortiert das Ergebnis danach, wie relevant das Dokument für den Suchbegriff ist. Die Ausgabe dieses Befehls sieht ungefähr so aus:
{ "_id" : 1, "star_rating" : 4, "comments" : "apple is red", "score" : 0.6079270860936958 }
{ "_id" : 3, "star_rating" : 3, "comments" : "apples, oranges - healthy fruit", "score" : 0.6079270860936958 }
{ "_id" : 4, "star_rating" : 2, "comments" : "bake the apple pie in the oven", "score" : 0.6079270860936958 }
$text
und $search
werden auch für delete
Befehle aggregate
count
,findAndModify
,update
, und unterstützt.
Aggregationsoperatoren
Aggregationspipeline mit $match
db.test.aggregate( [{ $match: { $text: { $search: "apple pie" } } }] )
Ausgabe:
Der obige Befehl gibt die folgenden Ergebnisse zurück:
{ "_id" : 1, "star_rating" : 4, "comments" : "apple is red" }
{ "_id" : 3, "star_rating" : 3, "comments" : "apple - a healthy fruit" }
{ "_id" : 4, "star_rating" : 2, "comments" : "bake the apple pie in the oven" }
{ "_id" : 2, "star_rating" : 5, "comments" : "pie is delicious" }
Eine Kombination anderer Aggregationsoperatoren
db.test.aggregate( [ { $match: { $text: { $search: "apple pie" } } }, { $sort: { score: { $meta: "textScore" } } }, { $project: { score: { $meta: "textScore" } } } ] )
Ausgabe:
Der obige Befehl gibt die folgenden Ergebnisse zurück:
{ "_id" : 4, "score" : 0.6079270860936958 }
{ "_id" : 1, "score" : 0.3039635430468479 }
{ "_id" : 2, "score" : 0.3039635430468479 }
{ "_id" : 3, "score" : 0.3039635430468479 }
Geben Sie mehrere Felder an, wenn Sie einen Textindex erstellen
Sie können bis zu drei Feldern in Ihrem Verbundtextindex Gewichtungen zuweisen. Die Standardgewichtung, die einem Feld in einem Textindex zugewiesen wird, ist eins (1). Das Gewicht ist ein optionaler Parameter und muss im Bereich von 1 bis 100.000 liegen.
db.test.createIndex( { "firstname": "text", "lastname": "text", ... }, { weights: { "firstname": 5, "lastname":10, ... }, name: "name_text_index" } )
Unterschiede zu MongoDB
Die Textindex-Funktion von Amazon DocumentDB verwendet einen umgekehrten Index mit einem Term-Frequenz-Algorithmus. Textindizes sind standardmäßig dünn gesät. Aufgrund von Unterschieden in der Parsing-Logik, Tokenisierungstrennzeichen und anderen kann es sein, dass dieselbe Ergebnismenge wie MongoDB nicht für denselben Datensatz oder dieselbe Abfrageform zurückgegeben wird.
Es bestehen die folgenden zusätzlichen Unterschiede zwischen dem Amazon DocumentDB-Textindex und MongoDB:
Zusammengesetzte Indizes, die Nicht-Text-Indizes verwenden, werden nicht unterstützt.
Amazon DocumentDB-Textindizes unterscheiden nicht zwischen Groß- und Kleinschreibung und diakritischen Zeichen.
Für den Textindex wird nur die englische Sprache unterstützt.
Die Textindizierung von Array-Feldern (oder Feldern mit mehreren Schlüsseln) wird nicht unterstützt. Wenn Sie beispielsweise einen Textindex für „a“ mit dem Dokument {„a“: [„apple“, „pie“]} erstellen, schlägt fehl.
Die Indexierung von Platzhaltertext wird nicht unterstützt.
Eindeutige Textindizes werden nicht unterstützt.
Das Ausschließen eines Begriffs wird nicht unterstützt.
Bewährte Verfahren und Richtlinien
Für eine optimale Leistung bei Textsuchabfragen, bei denen nach Textwerten sortiert wird, wird empfohlen, den Textindex vor dem Laden von Daten zu erstellen.
Textindizes benötigen zusätzlichen Speicherplatz für eine optimierte interne Kopie der indizierten Daten. Dies hat zusätzliche Kosten zur Folge.
Einschränkungen
Für die Textsuche gelten in Amazon DocumentDB die folgenden Einschränkungen:
Die Textsuche wird nur auf Amazon DocumentDB 5.0-Clustern auf Instanzbasis unterstützt.