MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB diacriticInSensitive-Suche zeigt nicht wie erwartet alle Zeilen mit Akzent (Wörter mit diakritischen Zeichen) und umgekehrt

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