Отmongodb 3.2 , текстови индекси са нечувствителни към диакритика:
С версия 3 текстовият индекс не е чувствителен към диакритика. Тоест, индексът не прави разлика между знаци, които съдържат диакритични знаци и техния немаркиран двойник, като é, ê и e. По-конкретно, текстовият индекс премахва символите, категоризирани като диакритични в Unicode 8.0 Character Database Prop List.
Така че следната заявка трябва да работи:
db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );
но изглежда, че има грешка с диереза ( ¨ ), дори ако е категоризирана като диакрит в списъка на unicode 8.0 (проблем на JIRA:SERVER-29918 )
Решение
отmongodb 3.4 можете да използвате съпоставяне, което ви позволява да изпълнявате този вид заявка:
например, за да получите очаквания резултат, изпълнете следната заявка:
db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})
това ще изведе:
{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }
в съпоставянето, strength
е нивото на сравнение за изпълнение
- 1 :само основен знак
- 2 :чувствителен към диакритичен знак
- 3 :чувствителен към главни букви + чувствителен към диакрит