MongoDB Vollständigen und Partiellen Text-Suche
Env:
- MongoDB (3.2.0) mit MongoS
Sammlung:
- Benutzer
Text-Index-Erstellung:
BasicDBObject keys = new BasicDBObject();
keys.put("name","text");
BasicDBObject options = new BasicDBObject();
options.put("name", "userTextSearch");
options.put("unique", Boolean.FALSE);
options.put("background", Boolean.TRUE);
userCollection.createIndex(keys, options); //using MongoTemplate
Dokument:
- {"name":"LEONEL"}
Abfragen:
db.users.find( { "$text" : { "$search" : "LEONEL" } } )
=> GEFUNDENdb.users.find( { "$text" : { "$search" : "leonel" } } )
=> GEFUNDEN (Suche caseSensitive auf false ist)db.users.find( { "$text" : { "$search" : "LEONÉL" } } )
=> GEFUNDEN (Suche mit diacriticSensitive false)db.users.find( { "$text" : { "$search" : "LEONE" } } )
=> GEFUNDEN (teilsuche)db.users.find( { "$text" : { "$search" : "LEO" } } )
=> NICHT GEFUNDEN (teilsuche)db.users.find( { "$text" : { "$search" : "L" } } )
=> NICHT GEFUNDEN (teilsuche)
Irgendeine Idee, warum bekomme ich 0 Ergebnisse bei der Verwendung als Abfrage "LEO" oder "L"?
Regex mit Text-Index-Suche ist nicht erlaubt.
db.getCollection('users')
.find( { "$text" : { "$search" : "/LEO/i",
"$caseSensitive": false,
"$diacriticSensitive": false }} )
.count() //0 results
db.getCollection('users')
.find( { "$text" : { "$search" : "LEO",
"$caseSensitive": false,
"$diacriticSensitive": false }} )
.count() //0 results
Mongo Dokumentation:
- https://docs.mongodb.com/v3.2/text-search/
- https://docs.mongodb.com/manual/reference/operator/query/text/
- https://docs.mongodb.com/manual/core/index-text/
- https://jira.mongodb.org/browse/SERVER-15090
- Möglich, Duplikat der MongoDB: Ist es möglich, groß- / Kleinschreibung Abfrage?
- Diese Frage ist im Zusammenhang zu partiellen Suche mit einem text-index und nicht groß-und Kleinschreibung beachten. @LucasCosta bitte nicht tag diese Frage als verdoppelt.
- Es ist möglich, muss mindestens 5 Stimmen @Leonel
- Haben Sie versucht
/LEO/i
? Sie können die Verwendung von regex in der Suche nach Wert in mongodb - text-index-Suche wird nicht zulassen, dass regex.
- Suche ohne index: stackoverflow.com/a/48250561/557432
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als bei MongoDB 3.4, die text-Suche Funktion wurde zur Unterstützung der groß-und Kleinschreibung suchen auf text-Inhalte mit der Sprache-spezifische Regeln für die Stoppwörter und stemming. Stemming-Regeln für unterstützte Sprachen basieren auf standard-algorithmen, die in der Regel behandeln häufige Verben und Substantive sind aber keine Ahnung von Eigennamen.
Gibt es keine explizite Unterstützung zur teilweisen oder fuzzy-matches, sondern Begriffe, die Stammzellen zu einem ähnlichen Ergebnis scheint zu arbeiten als solche. Zum Beispiel: "schmecken", "Geschmack", und geschmackvoll" alle Stamm "tast". Versuchen Sie, die Snowball Stemming Demo Seite zu Experimentieren, mit mehr Wörtern und stemming-algorithmen.
Ihre Ergebnisse, Stimmen, sind alle Variationen über das gleiche Wort "LEONEL", und unterscheiden sich nur durch das Gehäuse und diakritische Zeichen. Es sei denn, "LEONEL" kann eingedämmt werden, etwas kürzer, nach den Regeln der von Ihnen ausgewählten Sprache, diese sind die einzige Art von Variationen, die passen.
Wenn Sie wollen, um effizienter teilweise übereinstimmt, müssen Sie einen anderen Ansatz. Für einige hilfreiche Ideen finden Sie unter:
Gibt es eine relevante Verbesserung Wunsch können Sie watch/upvote in der MongoDB issue-tracker: SERVER-15090: Verbesserung der Text-Indizes zur Unterstützung von teilweise übereinstimmung.
Als Mongo derzeit nicht unterstützt teilweise die Suche standardmäßig...
Habe ich eine einfache statische Methode.
Wie zu verwenden: