2016-11-23 5 views
0

Ich habe eine Frage, ist es möglich, eine LIKE Operatorsuche in Redis zu erstellen? Ähnlich relationaler (mysql/oracle) Datenbank.Wie LIKE-Operator-Suche in Redis-Cache mit Nodejs erstellen?

Ich habe komplexe json:

{"_id" : ObjectId("581c8b8854fdcd1ff8c944e0"), 
"Objectcode" : "xxxxx", 
"Objecttype" : "xxxx", 
"docid" : "581c8b8554fdcd1ff8c93d10", 
"description" : "Tags based search .... ", 
"metaTags" : [ 
    "tag1", 
    "tag2", 
    "tag3", 
    "tag5", 
    "tag6", 
    "tag7", 
    "tag8", 
    "tag9", 
    "tag10" 
], 
"__v" : 0 

}

und ich möchte auf Array von Metatags suchen, wie ich es tun kann?

Dank

Antwort

0

können Sie Redis verwenden * SCANhttp://redis.io/commands/scan Befehle Ihrer type of data abhängig von einem Muster zu filtern:

  • SCAN iteriert die Menge des Schlüssels in der aktuell Redis Datenbank ausgewählt .
  • SSCAN iteriert Elemente von Sets Typen.
  • HSCAN iteriert Felder von Hash-Typen und die zugehörigen Werte.
  • ZSCAN iteriert Elemente sortierter Settypen und die zugehörigen Scores.

Nie KEYS in App-Code verwenden, da es die Leistung ruinieren kann.

Die beiden großen NodeJS redis Client-Bibliotheken node_redis und ioredis Unterstützung es, mit einigen Syntax Zucker:

const keys = []; 
const redis = new Redis(); // ioredis 
redis.mset('foo1', 1, 'foo2', 1, 'foo3', 1, 'foo4', 1, 'foo10', 1,() => { 
    const stream = redis.scanStream(); 
    stream.on('data', data => { 
    keys = keys.concat(data); 
    }); 
    stream.on('end',() => { 
    assert.equal(keys.sort(), ['foo1', 'foo10', 'foo2', 'foo3', 'foo4']); 
    }); 
}); 
+0

Sie haben vor iand zu verwandeln denormalize es Datentypen Redis: http://redis.io/topics/data-types konzentrieren, wie Sie es abfragen erwarten – Dario

+0

http : //www.rediscookbook.org/implement_tags_and_search_them.html – Dario

+0

danke, ich benutze npm red nicht ioredis. Der obige Link ist ein ganz normaler JSON, aber ich suche nach einer komplexen JSON-Suche. vielen vielen Dank. – ALAxmAnA

0

Sie können MATCH-Befehle verwenden, Daten zu suchen.

Eg: scan 0 MATCH *11* 

Siehe: http://redis.io/commands/scan

+0

danke, ich wurde oben Link versucht aber es gibt kein Glück, vor dieser Frage Post. – ALAxmAnA

Verwandte Themen