query - 怎样基于Redis实现模糊查询
某草草
某草草 2017-04-24 16:00:35
0
3
1278

问题如题,注意不是指模糊查询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

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

某草草
某草草

모든 응답(3)
淡淡烟草味

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

으아악

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

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

巴扎黑

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

黄舟

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

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿