In diesem Kapitel werden wir die Volltextsuche in MongoDB vorstellen, die sich vom "like"-Operator in SQL unterscheidet. Die Volltextsuche in MongoDB ist effizienter bei der Textsuche im Vergleich zur Implementierung von "like" in SQL.
Vorbereiten von Testdaten
Fügen Sie einige Datensätze in die Stores-Sammlung ein
db.stores.insert(
[
{ _id: 1, name: "Java Hut", description: "Kaffee und Kuchen" },
{ _id: 2, name: "Burger Buns", description: "Gourmet-Hamburger" },
{ _id: 3, name: "Coffee Shop", description: "Nur Kaffee" },
{ _id: 4, name: "Clothes Clothes Clothes", description: "Günstige Kleidung" },
{ _id: 5, name: "Java Shopping", description: "Indonesische Waren" }
]
)
Textindex erstellen
Um die Volltextsuchfunktion nutzen zu können, müssen Sie einen Textindex erstellen. Beispiel:
db.stores.createIndex( { name: "text", description: "text" } )
Erklärung:
- Erstellt einen Textindex für die Felder Name und Beschreibung.
Hinweis: Eine Sammlung erlaubt nur einen Textindex, aber ein Textindex kann mehrere Felder umfassen.
$text-Operator
Verwenden Sie den $text-Operator für die Textsuche.
Syntax:
{ $text: { $search: "Suchbegriff" } }
Beispiel:
db.stores.find( { $text: { $search: "java coffee shop" } } )
Erklärung:
- Suche nach Dokumenten, die die Suchbegriffe "Kaffee", "Shop" und "Java" in den Feldern Name und Beschreibung enthalten.
Ergebnis:
{ "_id" : 3, "name" : "Coffee Shop", "description" : "Nur Kaffee" }
{ "_id" : 1, "name" : "Java Hut", "description" : "Kaffee und Kuchen" }
{ "_id" : 5, "name" : "Java Shopping", "description" : "Indonesische Waren" }
Phrasensuche
db.stores.find( { $text: { $search: "\"coffee shop\"" } } )
Ergebnis
{ "_id" : 3, "name" : "Coffee Shop", "description" : "Nur Kaffee" }
Relevanzsortierung
Standardmäßig sind die Ergebnisse einer $text-Abfrage unsortiert. Die $text-Abfrage berechnet eine Relevanzbewertung (textScore) für jedes Dokument. Wir können diese Bewertung verwenden, um Dokumente mit höherer Relevanz oben zu sortieren und anzuzeigen.
db.stores.find(
{ $text: { $search: "java coffee shop" } },
{ score: { $meta: "textScore" } } // Deklariert, um die Relevanzbewertung textScore zurückzugeben
).sort( { score: { $meta: "textScore" } } ) // Sortierung unter Verwendung von textScore spezifizieren
Hinweis: Die Volltextsuche in MongoDB bietet keine sehr gute Unterstützung für chinesische Phrasen.