sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB diakritisk følsom søgning viser ikke alle accentuerede (ord med diakritisk tegn) rækker som forventet og omvendt

Siden mongodb 3.2 , tekstindekser er diakritisk ufølsomme:

Med version 3 er tekstindekset diakritisk ufølsomt. Det vil sige, at indekset ikke skelner mellem tegn, der indeholder diakritiske tegn, og deres ikke-markerede modstykke, såsom é, ê og e. Mere specifikt fjerner tekstindekset de tegn, der er kategoriseret som diakritiske tegn i Unicode 8.0 Character Database Prop List.

Så følgende forespørgsel burde virke:

db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );

men det ser ud til, at der er en fejl med dieresis (¨), selvom den er kategoriseret som diakritisk i unicode 8.0-listen (udgave på JIRA:SERVER-29918)

Løsning

siden mongodb 3.4 du kan bruge sortering, som giver dig mulighed for at udføre denne form for forespørgsel:

for eksempel, for at få dit forventede output, skal du køre følgende forespørgsel:

db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})

dette vil udsende:

{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }

i sorteringen, strength er sammenligningsniveauet, der skal udføres

  • 1 :kun grundtegn
  • 2 :diakritisk følsom
  • 3 :følsomme mellem store og små bogstaver + diakritisk følsom



  1. Hvordan gemmer man kun én database i Redis?

  2. Oprettelse af multifeltindekser i Mongoose / MongoDB

  3. NestJS:Sådan implementeres sessionsbaseret brugergodkendelse

  4. Hvordan kan jeg gennemse/se de værdier, der er gemt i Redis