Rails,Soulmate,Redis删除记录

时间:2013-06-28 14:13:59

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

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

我使用了json加载,我有一个独特的记录“id”

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

如何从redis中删除该记录,以便它不再显示在搜索结果中?

1 个答案:

答案 0 :(得分:1)

使用redis-cli命令直接从Redis进行操作并非易事。 查看灵魂伴侣代码,数据结构如下:

  • 一个灵魂伴侣指数:[类型]集包含所有前缀

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

  • 每个前缀,一个灵魂伴侣指数:[类型]:[前缀]排序集(带分数和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