【问题标题】:How to create LIKE operator search in Redis cache using nodejs?如何使用 nodejs 在 Redis 缓存中创建 LIKE 运算符搜索?
【发布时间】:2017-04-07 06:44:21
【问题描述】:

我有一个问题,是否可以在 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 数组,我该怎么做?

谢谢

【问题讨论】:

    标签: node.js redis node-redis


    【解决方案1】:

    您可以使用 MATCH 命令来搜索数据。

    Eg: scan 0 MATCH *11*
    

    参考:http://redis.io/commands/scan

    【讨论】:

    • 谢谢,我在上面的链接中试过,但在这个问题发布之前没有运气。
    【解决方案2】:

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

    • SCAN 迭代当前选定的 Redis 数据库中的一组键。
    • SSCAN 迭代 Sets 类型的元素。
    • HSCAN 迭代 Hash 类型的字段及其关联值。
    • ZSCAN 迭代 Sorted Set 类型的元素及其相关分数。

    切勿在应用代码中使用 KEYS,因为它可能会破坏性能。

    两个主要的nodejs 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']);
      });
    });
    

    【讨论】:

    • 您必须先转换 i 并将其非规范化为 redis 数据类型:redis.io/topics/data-types 专注于您希望如何查询它
    • 谢谢,我使用的是 npm redis 而不是 ioredis。上面的链接是非常普通的 JSON,但我正在寻找复杂的 JSON 搜索。非常感谢。
    • Redis 是一个键值对数据库(通常用作 LRU 缓存),而不是文档存储。它不适用于 JSON 类型,因此您必须将其转换为 hashes/sets/lists 和其他 redis 数据类型。
    猜你喜欢
    • 2019-08-24
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2021-04-27
    • 2017-03-31
    • 2021-12-11
    相关资源
    最近更新 更多