1

Soulmate を使用して検索結果をオートコンプリートしますが、しばらくするとレコードを削除して、検索フィールドに再び表示されないようにしたいと考えています。Soulmate でリストをリロードするのは、少しハックで不必要に思えます。

json を使用してロードし、一意のレコード「id」を持っています

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

そのレコードを redis から削除して、検索結果に再び表示されないようにするにはどうすればよいですか?

4

1 に答える 1

1

redis-cli コマンドを使用して、Redis から直接実行するのは簡単ではありません。ソウルメイト コードを見ると、データ構造は次のようになります。

  • すべてのプレフィックスを含む soulmate-index:[type] セット

  • id と json オブジェクトの関連付けを含む soulmate-data:[type] ハッシュ オブジェクト。

  • プレフィックスごとに、 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

おそらく、Soulmate.Loader クラスで提供されている remove メソッドを Ruby スクリプトから直接呼び出して、すべてを自動化する方が簡単でしょう。

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

于 2013-06-28T16:12:22.063 に答える