我使用Soulmate自动完成搜索结果,但我希望在一段时间后能够删除记录,这样它们就不会再次出现在搜索字段中。用Soulmate重新加载列表似乎有点古怪,也没有必要。
我使用json加载,并且我有一个唯一的记录"id"
{"id":1547,"term":"Foo Baar, Baaz","score":85}
如何从redis中删除该记录,使其不会再次出现在搜索结果中?
使用Redis-cli命令直接从Redis执行此操作并非易事。看看灵魂伴侣代码,数据结构如下:
-
灵魂伴侣索引:[类型]集合,包含所有前缀
-
一个灵魂伴侣数据:[type]hash对象,包含id和json对象之间的关联。
-
每个前缀,一个灵魂伴侣索引:[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