Od mongodb 3.2 , textové indexy jsou necitlivé na diakritiku:
U verze 3 není index textu citlivý na diakritiku. To znamená, že index nerozlišuje mezi znaky, které obsahují diakritická znaménka, a jejich neoznačenými protějšky, jako jsou é, ê a e. Přesněji řečeno, textový rejstřík odstraňuje znaky kategorizované jako diakritika v seznamu vlastností databáze znaků Unicode 8.0.
Následující dotaz by tedy měl fungovat:
db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );
ale vypadá to, že existuje chyba s dieresis ( ¨ ), i když je v seznamu unicode 8.0 zařazena jako diakritika (vydání na JIRA:SERVER-29918)
Řešení
od mongodb 3.4 můžete použít řazení, které vám umožní provádět tento druh dotazu:
například pro získání očekávaného výstupu spusťte následující dotaz:
db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})
toto vypíše:
{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }
v řazení strength
je úroveň srovnání výkonu
- 1 :pouze základní znak
- 2 :citlivé na diakritiku
- 3 :rozlišují velká a malá písmena + rozlišují diakritiku