2017-03-23 2 views
1

Es gibt 10000 Datensätze wie diese, die in Mongo gespeichert sind. So durchsuchen Sie effizient in node.js. Die Suchkriterien können auf einem der folgenden 3 Felder in Mongo basieren. Die Suchkriterien werden vom Frontend kommen und sie können UserID oder MitarbeiterName oder Abteilung suchen. Für die Suche wird nur eine Eingabe gemacht, d. H. Nur ein Feld, das mit irgendeinem dieser Felder etwas wie Google-Suche übereinstimmen kann.Effiziente Textsuche über mehrere String-Felder in Mongo mit Nodejs

{ 
     "userID": "01000900", 
     "employeeName": "A Abc", 
     "department": "Replenishment Boston" 
    }, 
    { 
     "userID": "01001024", 
     "employeeName": "K Gbc", 
     "department": "Sales S-II - MA Core Urb" 
    }, 
    { 
     "userID": "01001023", 
     "employeeName": "Ga Va", 
     "department": "Sales Phoenix" 
    }, 
    { 
     "userID": "01000282", 
     "employeeName": "D Din", 
     "department": "Sales S-II - California - Me" 
    } 
+0

Index für jedes Feld sicherstellen (siehe [** mongodb-Indizes **] (https://docs.mongodb.com/manual/reference/method/db.collection.ensureIndex/)). Dann suchen Sie nur Dokumente mit [** find() **] (https://mongodb.github.io/node-mongodb-native/markdown-docs/queries.html) – felix

+0

Danke für die Antwort, ich werde es untersuchen und aktualisieren meine Ergebnisse. – Aneek

Antwort

2

Angenommen search der Wert von dem aus auf Client bekommen sind. Verwenden Sie regulären Ausdruck.

{ 
    $or:[ 
    {userId:{$regex: searchText, $options: 'i'}}, 
    {employeeName:{$regex: searchText, $options: 'i'}}, 
    {department:{$regex: searchText, $options: 'i'}} 
    ] 
} 
+0

Danke Monisha. Ich werde das Ding überprüfen. – Aneek

+0

Vielen Dank für die Lösung. – Aneek

0

Sie können Index für jedes Feld erstellen. Auf diese Weise wird beim Scannen einiger Daten das gesamte Dokument nicht gescannt. Die Suche basiert auf dem Index. So erhalten Sie sofort das Ergebnis. Jetzt zum Erstellen eines Indexes. Angenommen, Sie einen Index für employeeName erstellen möchten, dann gehen Sie wie folgt vor:

db.collectionName.createIndex({employeeName:1}); 
2

Sie Text index auf allen drei Feldern verwenden können wie folgt vor:

db.collection.createIndex(
    { 
     userID: "text", 
     employeeName: "text", 
     department: "text" 
    } 
) 

Die Abfrage db.collection.find({ $text: { $search: "string from input" } })

etwas tun sollten wie Google Suche. Docs for text query syntax.

Verwandte Themen