riak-search
修正が必要なドキュメントを検索して更新する正しい方法は何ですか? 設計上、riak-search は riak-kv コンテンツに固執しないインデックスです。ただし、負荷の高いチェック/書き込み操作では、インデックスが riak-kv コンテンツと一致しません。
限られた数の一致するエントリで読み取り/書き込み操作を制限するために、riak-search を当てにしています。
この種のアルゴリズムを使用して操作することはできません。
page=0
while true:
results = riak.search('index', 'sex:male', start=page)
if results['num_found'] == 0:
break
for r in results['docs']:
obj = riak.bucket_type(r['_yz_rt']).bucket('_yz_rb').get('_yz_rk')
// alter object
obj.store()
page = page + len(results['docs])
私はそれに多くの問題を見ます:
- まず、riak-search が追いつくと、最初に変更したドキュメントが見つからず、ページネーションが壊れてしまいます。
- 最後からページ付けすることは魅力的な代替手段ですが、それでsolrにストレスを与えるか、
max_search_results
限界に達します - テスト
num_found
はループを壊す良い方法ではありません。私はそれを確信しています。
編集を開始する前に、すべての riak-kv キーをロードする必要がありますか? 私のニーズを達成するための適切なアルゴリズム/方法はありますか?
編集:
私のユースケースは次のとおりです。私は、文字列トークナイザー アルゴリズムからの用語の配列を含むテキスト ドキュメントを保存します。これは、機械学習システムが進化し、時間の経過とともに改善されるためです。文字列トークナイザーは、ワード クラウドを作成するだけです。
バケットの種類が増え続けており、以前のトークナイザー バージョンから古い用語配列にパッチを適用する必要があります。それを達成するために、古いドキュメント、または新しいトークナイザー バージョンで修正された場所を知っている悪いトークンを含むドキュメントを検索したいと考えています。
したがって、私の検索クエリは次のいずれかです。
- 用語:badtoken
- 作成日:[2000-11-01 から 2014-12-01]
日付を扱うことは問題ではありませんが、トークンを扱うことは問題です。ドキュメントからbadtokenを削除すると、「badtoken」を検索しながら、数秒でsolrインデックスが変更されます。それは私の現在のページネーションを変更し、ドキュメントを見逃すことになります。
今のところ、インデックスを使用することを断念し、単純にバケツ全体を調べました。