2016-11-23 89 views
0

我有一個問題,是否有可能在Redis中創建LIKE運算符搜索?與關係型(mysql/oracle)數據庫類似。如何使用nodejs在Redis緩存中創建LIKE運算符搜索?

我有複雜的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 

}

,我想搜索的元標記陣列我該怎麼辦呢?

感謝

回答

0

您可以使用Redis的* SCAN命令http://redis.io/commands/scan,這取決於你的type of data的一個模式來過濾:

  • SCAN遍歷當前選定的Redis數據庫密鑰的集合。
  • SSCAN迭代元素集合類型。
  • HSCAN迭代哈希類型及其關聯值的字段。
  • ZSCAN迭代Sorted Set類型的元素及其相關分數。

切勿使用KEYS在應用程序代碼,因爲它可能會破壞性能。

兩個主要的Redis的NodeJS客戶端庫node_redisioredis支持它,有一些語法糖:

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

你之前IAND非規範化改造它的Redis數據類型:http://redis.io/topics/data-types專注於您希望如何查詢它 – Dario

+0

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

+0

謝謝,我使用npm redis而不是ioredis。上面的鏈接是非常正常的JSON,但我正在尋找複雜的JSON搜索。非常感謝。 – ALAxmAnA

0

您可以使用MATCH命令來搜索數據。

Eg: scan 0 MATCH *11* 

參見:http://redis.io/commands/scan

+0

謝謝,我在上面的鏈接嘗試,但沒有運氣,在此問題發佈之前。 – ALAxmAnA

相關問題