1

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

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

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

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

4

1 回答 1

1

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

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

  • 一个灵魂伴侣数据:[type] 哈希对象,包含 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

于 2013-06-28T16:12:22.063 回答