2017-01-18 2 views
0

Wir verwenden MongoDB für ein neues Projekt, in dem wir die Textsuche (mit dem $ text index) durchführen müssen.

Da unsere Daten verschlüsselt werden müssen, ohne Leerzeichen, scheint es MongoDb als ein Wort, wenn ich versuche, es abzufragen (mit einem verschlüsselten Text), bekomme ich keine Ergebnisse.

Zum Beispiel (sicher, diese Daten verschlüsselt im wirklichen Leben):

Wenn ich den folgenden Text in meinem Dokument:

„Wenn jemand liebt eine Blume, von denen nur eine einzige Blüte er glücklich ist es genug, um in all den Millionen von Sternen, wächst, nur um in den Sternen zu schauen „ Und ich Abfrage so etwas wie:.

db.book.find( 
{ 
    $text: { $search: "mill \"enou\"" } 
}) 

ich mag den Begriff zu finden.

Gibt es eine Möglichkeit, MongoDb Soft-Suche zu akzeptieren?

Bearbeiten: Am Ende arbeitete der Rejex Ausdruck mit einem Index für uns.

Antwort

1

Ich denke, dass die beste Option ist $regex zu verwenden anstelle der $ text Betreiber diesen

zum Beispiel tun Sie zur Verfügung gestellt, würde die Abfrage sein:

db.book.find({text: 
    {$regex: /mill.*enou/ } 
}) 
+0

In Bezug auf Leistung, Don Verlieren wir den Nutzen des "$ text" -Indexes durch die Verwendung von Regex-Ausdruck? – AvrahamL

+0

@AvrahamL Ja, Regex-Abfragen werden länger dauern, aber ab MongoDB 3.4 ist dies der einzige Weg, dies zu erreichen – felix