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

MongoDB diacriticInSensitive La ricerca non mostra tutte le righe accentate (parole con segno diacritico) come previsto e viceversa

Da mongodb 3.2 , indici di testo sono insensibili ai segni diacritici:

Con la versione 3, l'indice di testo è insensibile ai segni diacritici. Cioè, l'indice non distingue tra i caratteri che contengono segni diacritici e la loro controparte non contrassegnata, come é, ê ed e. Più in particolare, l'indice di testo elimina i caratteri classificati come segni diacritici nell'elenco delle proprietà del database dei caratteri Unicode 8.0.

Quindi la seguente query dovrebbe funzionare:

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

ma sembra che ci sia un bug con la dieresi ( ¨ ), anche se è classificato come diacritico nell'elenco unicode 8.0 (problema su JIRA:SERVER-29918 )

Soluzione

da mongodb 3.4 puoi utilizzare le regole di confronto che ti consentono di eseguire questo tipo di query:

ad esempio, per ottenere l'output previsto, eseguire la query seguente:

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

questo produrrà:

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

nella confronto, strength è il livello di confronto da eseguire

  • 1 :solo carattere di base
  • 2 :diacritico sensibile
  • 3 :case sensitive + diacritic sensitive