2017-11-07 7 views
0

Solrのインデックス付きドキュメントがあり、一部のフィールドを更新したいとします。しかし、問題は、私が1つのドキュメントを更新していて、完全に更新している場合です。しかし、同じコードで複数のドキュメントをまとめて更新するためにforループを使用すると、エラーが発生します。ここで forループを使用してSolrJを使用してSolrドキュメントを更新します。

は、単一のドキュメントを更新するための私のコードであり、それは働いている - 今

SolrInputDocument doc = new SolrInputDocument(); 
HashMap<Integer, String> Id = new HashMap<>(); 
HashMap<Integer, String> Title = new HashMap<>(); 
HashMap<Integer, String> Name = new HashMap<>(); 
Id.put(0, 123); 
Id.put(1, 345); 
Title.put(0, "Title1"); 
Title.put(1, "Title2"); 
Name.put(0, "Tony"); 
Name.put(1, "Scarlet"); 
doc.addField("Id", Id.get(0)); 
doc.addField("Title", Title.get(0)); 
doc.addField("Name", Name.get(0)); 
solr.add(doc); 
solr.commit(); 

同じコード私のようなforループを使用して実行する場合 - 次に、このようなエラーを投げている

SolrInputDocument doc = new SolrInputDocument(); 
HashMap<Integer, String> Id = new HashMap<>(); 
HashMap<Integer, String> Title = new HashMap<>(); 
HashMap<Integer, String> Name = new HashMap<>(); 
Id.put(0, 123); 
Id.put(1, 345); 
Title.put(0, "Title1"); 
Title.put(1, "Title2"); 
Name.put(0, "Tony"); 
Name.put(1, "Scarlet"); 
for (int i =0; i<2; i++) { 
    doc.addField("Id", Id.get(i)); 
    doc.addField("Title", Title.get(i)); 
    doc.addField("Name", Name.get(i)); 
    solr.add(doc); 
    solr.commit(); 
} 

- "ドキュメントにはuniqueKeyフィールドに複数の値が含まれています:Id = [123、345]"。 注 - Idは私のユニークなキーです。 ここで何が問題ですか?

答えて

1

繰り返しごとに新しいSolrDocumentを作成するわけではないので、古いものに値を追加するだけです。ループの次の反復により、idフィールドに2つの値が設定されますが、これは機能しません。

追加するドキュメントごとに新しいInputDocumentを作成し、両方のドキュメントが追加された後にコミットを移動します(の各ドキュメントをループに入れて)。

また、インデックスを作成しようとしているものを表す単一のオブジェクトにHashMapを書き換えるか、少なくとも "name"、 "id"、 "title"エントリを持つオブジェクトを記述するためにHashMapを使用してから、これらのハッシュマップをリストに格納します。

for (int i = 0; i < 2; i++) { 
    SolrInputDocument doc = new SolrInputDocument(); 
    doc.addField("Id", Id.get(i)); 
    doc.addField("Title", Title.get(i)); 
    doc.addField("Name", Name.get(i)); 
    solr.add(doc); 
} 

solr.commit(); 
関連する問題