如何在使用Node.js的Redis缓存中创建LIKE操作符搜索?

3

我有一个问题,是否有可能在Redis中创建一个LIKE操作符搜索?类似于关系型(mysql/oracle)数据库。

我有一个复杂的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

我想在metaTags的数组上进行搜索,该如何操作?

谢谢

2个回答

0

谢谢,我之前尝试了上面的链接,但没有成功,在发出这个问题之前。 - ALAxmAnA

0

您可以使用Redis *SCAN命令http://redis.io/commands/scan,根据您的数据类型来按模式过滤:

  • SCAN迭代当前选定的Redis数据库中的键集。
  • SSCAN迭代Set类型的元素。
  • HSCAN迭代哈希类型的字段及其关联值。
  • ZSCAN迭代排序集类型的元素及其关联分数。

在应用程序代码中永远不要使用KEYS,因为它可能会破坏性能。

两个主要的Node.js Redis客户端库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']);
  });
});

你需要先将数据进行转换和去规范化,以适应 Redis 数据类型:http://redis.io/topics/data-types,并着重考虑如何查询它。 - Dario
谢谢,我正在使用npm redis而不是ioredis。上面的链接是非常普通的JSON,但我正在寻找复杂的JSON搜索。非常感谢你。 - ALAxmAnA
Redis是一种键值数据库(通常用作LRU缓存),而不是文档存储。它不支持JSON类型,因此您必须将其转换为哈希/集合/列表和其他Redis数据类型。 - Dario

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接