2015-11-02 11 views
9

Gibt es eine Möglichkeit, Ergebnisse auf Loopback + MongoDB mit Diacritic-Case-Insensitive-Optionen abzufragen?Diacritic Case-Insensitive-Suche Loopback

Zum Beispiel, wenn ich für die Abfrage gesucht werden soll olimpic und die Datenbank enthält Wörter wie:

Olímpic 
olimpic 
Olimpic 

Dann alle oben als Ergebnisse zurückgegeben werden sollen. Ich habe versucht mit mehreren Abfragen unten und anderen Kombinationen, aber nichts hat bisher funktioniert.

{"where":{"name.text":{"like":"olimpic","options":"i"}}} 
{"where":{"name.text":{"like":"/^olimpic$/i","options":"i"}}} 
{"where":{"name.text":{"like":"/.*olimpic.*/i"}}} 
{"where":{"name.text":{"regexp":"/.*olimpic.*/i"}}} 

Irgendeine Idee?

Vielen Dank im Voraus!

+0

Haben Sie schon einmal etwas versucht? Wenn ja, sollten Sie es teilen. – lintmouse

+0

@dustmouse alle Tests waren nicht erfolgreich. wenn ich die Lösung gefunden habe, werde ich es veröffentlichen – mhergon

+0

Mhergon - Das ist in Ordnung. Aber es tut immer noch nicht weh, Ihren Versuch zu zeigen, dass Sie sich bemüht haben, das Problem zu lösen. – lintmouse

Antwort

8

Was Sie wollen, sollte mit text indices ab Version 3.1.7 von MongoDB möglich sein. Einzelheiten finden Sie unter SERVER-1955710. Frühere Versionen können nicht mit diakritischen Zeichen umgehen.

einen Textindex Einrichten ist ziemlich einfach: einfach einen Index für alle Felder erstellen, die Sie gesucht werden soll - nur ein Textindex pro Sammlung sein kann:

db.yourCollection.createIndex(
    {"name.text":"text","foo":"text"}, 
    {"default_language":"french"} 
) 

Nun suchen Ihre Index, Sie tun einfach Folgendes:

db.yourCollection.find(
    { $text: {$search:"Olimpic"} } 
) 

, die Ihnen die erwarteten Ergebnisse geben sollte.

hth