Od mongodb 3.2 , indeksy tekstowe są niewrażliwe na znaki diakrytyczne:
W wersji 3 indeks tekstowy jest niewrażliwy na znaki diakrytyczne. Oznacza to, że indeks nie rozróżnia znaków zawierających znaki diakrytyczne od ich nieoznaczonych odpowiedników, takich jak é, ê i e. Mówiąc dokładniej, indeks tekstowy usuwa znaki sklasyfikowane jako znaki diakrytyczne w Liście właściwości bazy danych znaków Unicode 8.0.
Powinno więc zadziałać następujące zapytanie:
db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );
ale wygląda na to, że jest błąd związany z dierezą ( ¨ ), nawet jeśli na liście Unicode 8.0 jest on oznaczony jako znak diakrytyczny (problem w JIRA:SERVER-29918 )
Rozwiązanie
od mongodb 3.4 możesz użyć sortowania, które pozwala na wykonanie tego rodzaju zapytania:
na przykład, aby uzyskać oczekiwany wynik, uruchom następujące zapytanie:
db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})
to wygeneruje:
{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }
w zestawieniu strength
to poziom porównania do wykonania
- 1 :tylko znak podstawowy
- 2 :wrażliwy na znaki diakrytyczne
- 3 :rozróżniana wielkość liter + rozróżnianie znaków diakrytycznych