【问题标题】:Rails, Soulmate, Redis remove recordRails、Soulmate、Redis 删除记录
【发布时间】:2026-01-28 05:20:03
【问题描述】:

我使用 Soulmate 自动完成搜索结果,但是我希望能够在一段时间后删除记录,这样它们就不会再次出现在搜索字段中。用 Soulmate 重新加载列表似乎有点 hacky 和不必要。

我已经使用json加载并且我有一个唯一的记录“id”

{"id":1547,"term":"Foo Baar, Baaz","score":85}

如何从 redis 中删除该记录,使其不再出现在搜索结果中?

【问题讨论】:

    标签: ruby-on-rails redis record delete-record


    【解决方案1】:

    使用 redis-cli 命令直接从 Redis 执行此操作并非易事。 看soulmate代码,数据结构如下:

    • soulmate-index:[type] 包含所有前缀的集合

    • soulmate-data:[type] hash 对象,包含 id 和 json 对象之间的关联。

    • 每个前缀,一个soulmate-index:[type]:[prefix] 排序集(带有分数和id)

    所以要删除一个项目,你需要:

    Retrieve the json object from its id (you already did it) -> id 1547
    HDEL soulmate-data:[type] 1547
    Generate all the possible prefixes from "Foo Baar, Baaz"
    For each prefix:
       SREM soulmate-data:[type] [prefix]
       ZREM soulmate-index:[type]:[prefix] 1547
    

    从 Ruby 脚本中直接调用 Soulmate.Loader 类中提供的 remove 方法可能会更容易,它会为您自动执行所有操作。

    https://github.com/seatgeek/soulmate/blob/master/lib/soulmate/loader.rb

    【讨论】:

    • 是的,我最终使用了 Soulmates Loader class=)