sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB diacriticInSensitive search no muestra todas las filas acentuadas (palabras con marca diacrítica) como se esperaba y viceversa

Desde mongodb 3.2 , índices de texto son diacríticos insensibles:

Con la versión 3, el índice de texto es insensible a los signos diacríticos. Es decir, el índice no distingue entre caracteres que contienen marcas diacríticas y su contraparte no marcada, como é, ê y e. Más específicamente, el índice de texto elimina los caracteres categorizados como signos diacríticos en la lista de accesorios de la base de datos de caracteres Unicode 8.0.

Así que la siguiente consulta debería funcionar:

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

pero parece que hay un error con la diéresis (¨), incluso si está categorizado como diacrítico en la lista Unicode 8.0 (problema en JIRA:SERVIDOR-29918)

Solución

desde mongodb 3.4 puede usar la intercalación que le permite realizar este tipo de consulta:

por ejemplo, para obtener el resultado esperado, ejecute la siguiente consulta:

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

esto generará:

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

en la intercalación, strength es el nivel de comparación a realizar

  • 1 :solo carácter base
  • 2 :diacrítico sensible
  • 3 :sensible a mayúsculas y minúsculas + sensible a signos diacríticos