Seit mongodb 3.2 , Textindizes sind diakritisch unempfindlich:
Bei Version 3 ist der Textindex diakritisch unempfindlich. Das heißt, der Index unterscheidet nicht zwischen Zeichen, die diakritische Zeichen enthalten, und ihren nicht gekennzeichneten Gegenstücken wie é, ê und e. Genauer gesagt entfernt der Textindex die Zeichen, die in der Unicode 8.0 Character Database Prop List als diakritische Zeichen kategorisiert sind.
Die folgende Abfrage sollte also funktionieren:
db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );
aber es sieht so aus, als ob es einen Fehler mit Dieresis ( ¨ ) gibt, auch wenn es in der Unicode 8.0-Liste als diakritisch gekennzeichnet ist (Problem bei JIRA:SERVER-29918 )
Lösung
seit mongodb 3.4 Sie können die Sortierung verwenden, mit der Sie diese Art von Abfrage durchführen können:
Um beispielsweise die erwartete Ausgabe zu erhalten, führen Sie die folgende Abfrage aus:
db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})
dies wird ausgegeben:
{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }
in der Sortierung strength
ist das durchzuführende Vergleichsniveau
- 1 :nur Basiszeichen
- 2 :diakritische Zeichen
- 3 :case sensitive + diacritic sensitive