sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB diacriticInSensitive vyhledávání nezobrazuje všechny řádky s diakritikou (slova s ​​diakritickým znaménkem) podle očekávání a naopak

Od mongodb 3.2 , textové indexy jsou necitlivé na diakritiku:

U verze 3 není index textu citlivý na diakritiku. To znamená, že index nerozlišuje mezi znaky, které obsahují diakritická znaménka, a jejich neoznačenými protějšky, jako jsou é, ê a e. Přesněji řečeno, textový rejstřík odstraňuje znaky kategorizované jako diakritika v seznamu vlastností databáze znaků Unicode 8.0.

Následující dotaz by tedy měl fungovat:

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

ale vypadá to, že existuje chyba s dieresis ( ¨ ), i když je v seznamu unicode 8.0 zařazena jako diakritika (vydání na JIRA:SERVER-29918)

Řešení

od mongodb 3.4 můžete použít řazení, které vám umožní provádět tento druh dotazu:

například pro získání očekávaného výstupu spusťte následující dotaz:

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

toto vypíše:

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

v řazení strength je úroveň srovnání výkonu

  • 1 :pouze základní znak
  • 2 :citlivé na diakritiku
  • 3 :rozlišují velká a malá písmena + rozlišují diakritiku



  1. Jak nakonfigurovat webovou aplikaci spring boot s redis pomocí Dockeru

  2. Jak získat všechny klíče, které odpovídají konkrétnímu vzoru, z hash v redis?

  3. MongoDB - Chyba:příkaz getMore selhal:Kurzor nenalezen

  4. Jak mohu seřadit podle toho, že hodnoty null jsou naposledy uspořádány v mongodb?