検索

ホームページ  >  に質問  >  本文

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日前1261

全員に返信(3)返信します

  • 淡淡烟草味

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

    シンプルでデータ量の少ないファジークエリをある程度実現できる代替方法があります:
    ユーザー情報を書き込む際に、ユーザー名をKeyに分割してユーザーIDを記録します

    リーリー

    後であいまいクエリを実行する場合は、次の 2 つの項目を入力します。 もちろん、これら 2 つの値はユーザー ID に置き換えることができ、ユーザー ID に基づいてユーザーのハッシュ情報がクエリされます。 j,则可以从SET集合中查出jackjacksonこの方法は、クエリ条件が 1 つで、フィールドの長さが短い場合にのみ適しています。投稿タイトルと投稿記事を同時にファジー一致させる場合は、タイトルを試すことはできますが、内容は確実に達成できません。

    もちろん、Redis は本質的にこれに適しているわけではないため、他のソリューションがある場合は、他のソリューションを使用してそれを実現することをお勧めします。

    返事
    0
  • 巴扎黑

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

    婉曲的な方法は、Lua スクリプトを自分で書くことです。
    または、データセットが大きくない場合は、クライアント側で自分でフィルタリングします。
    ファジークエリが難しい要件である場合は、Solr または Elasticsearch に移行して実行することをお勧めします。

    返事
    0
  • 黄舟

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

    Redis にはそのような豊富なクエリ メソッドがなく、ファジー クエリはキーでのみ実行できるため、リッチなニーズを満たすことができません。高速なストレージが必要な場合は、Redis を使用することをお勧めします。ビジネスロジックを実行し、豊富なクエリメソッドを使用したい場合は、MongoDb を使用することをお勧めします。

    返事
    0
  • キャンセル返事