sql >> Database >  >> NoSQL >> MongoDB

MongoDB diacriticInSensitive zoekopdracht toont niet alle geaccentueerde (woorden met diakritische teken) rijen zoals verwacht en vice versa

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



  1. Wat zijn de gevallen waarin Redis de voorkeur heeft boven Aerospike?

  2. Redis::CommandError:ERR Client heeft AUTH verzonden, maar er is geen wachtwoord ingesteld

  3. Alle collecties in een mongo-database weergeven in een nodejs-script

  4. Connection String in MongoDB (met voorbeelden)