1

Solr 4スキーマに次のフィールドがあります

<field name="id" type="string" indexed="true" stored="true" required="true" />
<dynamicField name="rank_*" type="int" indexed="true" stored="true" />

これを使用してアトミックに更新できます。これはうまく機能し、他のフィールドをそのままにしておきます

{"add":{"doc":{"id":"111","rank_350":{"set":"1"},"rank_391":{"set":"4"}}},
 "add":{"doc":{"id":"222","rank_350":{"set":"1"},"rank_391":{"set":"4"}}}}

ここで、新しいランクで更新する前に既存のランクをクリアしたいと考えています。最初にランクを照会する必要はありません。上記のアプローチを使用して新しいランクだけで更新すると、更新はアトミックであるため、古い2つはそのまま残ります。

ある投稿内または他の更新でワイルドカードを使用しようとしましたが、solr は、すべてのランクに null 設定を適用するのではなく、rank_* というフィールドがあると考えています。

{"add":{"doc":{"id":"111","rank_*":{"set":"null"}}}

すべての rank_* 動的フィールドに更新を適用するにはどうすればよいですか?

理由は、一度に最大 200 個のバッチを更新するため (これは 1 回の投稿で実行できます)、以前に何があったかを確認するために最初にクエリを実行する必要がないようにするためです。1 ではなく 201 の投稿になるクエリを実行する必要がある場合、または削除されたものを知るためにイベントを変更することも困難です。

4

1 に答える 1