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

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

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

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

最佳答案

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

  • 灵魂索引:[类型]集,包含所有前缀
  • 一个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

    关于ruby-on-rails - Rails,Soulmate,Redis删除记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17366735/

    10-08 22:56