찾다

 >  Q&A  >  본문

query - 怎样基于Redis实现模糊查询

问题如题,注意不是指模糊查询Key,是指对值的模糊(关键字)查询。
举个栗子:

$ HMSET user:1 name jack age 18
$ HMSET user:2 name jackson age 21
$ HMSET user:3 name suse age 16

假如有上述用户数据,以哈希形式存储,如果要做排序,可以

# score为#age,value为#userId,以ZSET结构存储
$ ZADD user:rank:age 18 1 21 2 16 3
# 查询有序列表
$ ZRANGE user:rank:age 0 -1

但如果需要既实现根据年龄排序,还要能够实现关键字查询(模糊匹配用户名),应该怎样实现?

某草草某草草2761일 전1262

모든 응답(3)나는 대답할 것이다

  • 淡淡烟草味

    淡淡烟草味2017-04-24 16:02:35

    간단하고 적은 양의 퍼지 쿼리를 어느 정도 달성할 수 있는 대체 방법이 있습니다.
    사용자 정보 작성 시 사용자 이름을 Key로 분할하여 사용자 ID를 기록합니다

    으아악

    다음에 퍼지 쿼리를 수행할 때 j을 입력하면 SET 컬렉션에서 jackjackson 두 항목을 찾을 수 있습니다. 물론 이 두 값은 사용자 ID로 대체될 수 있습니다. 그런 다음 사용자 ID에 따라 사용자 해시 정보를 쿼리합니다.
    이 방법은 쿼리 조건이 단일이고 필드 길이가 짧은 시나리오에만 적합합니다. If: 게시물 제목과 게시물 기사의 퍼지 일치가 동시에 작동하지 않습니다. 제목은 계속 시도할 수 있지만 내용은 확실히 달성되지 않을 것입니다.

    물론 Redis는 본질적으로 이에 적합하지 않으므로 다른 솔루션이 있는 경우 이를 달성하기 위해 다른 솔루션을 사용하는 것이 좋습니다.

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-24 16:02:35

    완곡한 방법은 Lua 스크립트를 직접 작성하는 것입니다.
    또는 데이터 세트가 크지 않은 경우 클라이언트 측에서 직접 필터링하세요.
    퍼지 쿼리가 어려운 요구사항이라면 Solr 또는 Elasticsearch로 전환하는 것이 좋습니다.

    회신하다
    0
  • 黄舟

    黄舟2017-04-24 16:02:35

    Redis에는 이러한 풍부한 쿼리 방법이 없으며 퍼지 쿼리는 키에서만 수행할 수 있으므로 풍부한 요구 사항을 충족할 수 없습니다. 고속 스토리지를 원한다면 Redis를 사용하는 것이 좋습니다. 비즈니스 로직을 수행하고 풍부한 쿼리 방법을 갖고 싶다면 MongoDb를 사용하는 것이 좋습니다

    회신하다
    0
  • 취소회신하다