Sinds mongodb 3.2 , tekstindexen zijn diakritisch ongevoelig:
Met versie 3 is tekstindex diakritisch ongevoelig. Dat wil zeggen dat de index geen onderscheid maakt tussen tekens die diakritische tekens bevatten en hun niet-gemarkeerde tegenhanger, zoals é, ê en e. Meer specifiek verwijdert de tekstindex de tekens die als diakritische tekens zijn gecategoriseerd in Unicode 8.0 Character Database Prop List.
Dus de volgende query zou moeten werken:
db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );
maar het lijkt erop dat er een bug is met trema ( ¨ ), zelfs als het diakritisch is weergegeven in de unicode 8.0-lijst (probleem op JIRA:SERVER-29918 )
Oplossing
sinds mongodb 3.4 u kunt sortering gebruiken waarmee u dit soort zoekopdrachten kunt uitvoeren:
om bijvoorbeeld uw verwachte output te krijgen, voert u de volgende query uit:
db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})
dit zal output:
{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }
in de sortering, strength
is het vergelijkingsniveau om te presteren
- 1 :alleen basisteken
- 2 :diakritisch gevoelig
- 3 :hoofdlettergevoelig + diakritisch gevoelig