web-dev-qa-db-ja.com

部分的なドキュメント更新のためのsolrj api

Solr 4ベータ版がリリースされ、GAバージョンが間もなくリリースされます。ここで説明されているように、ドキュメントの部分的な更新はしばらくの間行われています: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update /

しかし、私はsolrj apiでそれを行う方法を理解していません。

誰かがそれがsolrjで可能かどうか知っていますか?それとも、solrjはこの機能を備えていませんか?

update:メーリングリストで説明したように(返信 こちら を参照)、solrj apiで値がSolrInputFieldはマップにすることができます-単純なスカラー値である必要はありません。マップの場合、solrjはフィールドのxml要素に追加のupdate属性を追加します。たとえば、このコード:

SolrInputDocument doc = new SolrInputDocument();
Map<String, String> partialUpdate = new HashMap<String, String>();
partialUpdate.put("set", "foo");
doc.addField("id", "test_123");
doc.addField("description", partialUpdate);

このドキュメントを生成します:

<doc boost="1.0">
    <field name="id">test_123</field>
    <field name="description" update="set">foo</field>
</doc>

この例では、この追加属性に「set」という単語を使用しましたが、機能しません。 Solrがフィールドを期待どおりに更新しません。このリンクによると: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/ 有効な値は「set」と「add」です。

何か案が?

26
Yoni

結局のところ、上記の質問のコードスニペットは実際に機能します。初めて試したとき、何が問題だったのかわかりません。単にコミットするのを忘れたか、スキーマが正しく構成されていなかった可能性があります。

いずれにせよ、この質問は非常にローカライズされています。ただし、ハッシュマップを使用したAPIはあまり文書化されていないため、この質問と回答を続けることは価値があると思いました。

ハッシュマップのキーは、次の3つの値のいずれかになります。

  • set-フィールドを設定します。
  • add-複数の値を持つフィールドに追加します。
  • inc-フィールドをインクリメントします。

このコードの例は、solrjユニットテストのtestUpdateFieldというメソッドにあります。

30
Yoni