2017-09-19 19 views
0

私は3000のドキュメントを持つコアにSolrインデックスを持っています。javaを使用してsolrインデックスの既存のフィールドを更新するには?

一意のキーPaperIDに基づいて、コア全体の1つのフィールドの値を変更したいとします。

私は次のJavaコードを使用していますが、既存の値を更新する代わりに、新しい文書を追加します。

if (solrDocument.get("PaperID").equals(solrDocument2.get("PaperID"))) { 

    String Mscore = (String) solrDocument.get("ID"); 
    String ModifyScore = (String) solrDocument.get("Author"); 

    //solrDocument.setField("ID", ModifyScore); 
    //update the field 
    System.out.println(Mscore); 
    System.out.println(ModifyScore); 
    System.out.println(solrDocument2.get("Mscore") + "\n"); 

    SolrInputDocument sid = new SolrInputDocument(); 

    Map<String, Object> fieldModifier = new HashMap<String, Object>(1); 

    fieldModifier.put("set", ModifyScore); 

    sid.setField("ID", fieldModifier); 

    //solr.add(sid); 
    solr.commit(); 

} 

誰もがそれに応じて私を導くことができる...あなたが.addコマンドをコメントアウトしましたので、あなたのコードは、何も変更されていませんよろしく

答えて

0

。 IDフィールドで実際のIDを使用する必要があります.Solrは、それ以外の場合に更新する文書を認識しないためです。 The field you're changing should have the fieldModifier attached

SolrInputDocument doc = new SolrInputDocument(); 

Map<String, String> fieldModifier = new HashMap<String, String>(); 

// Change ModifyScore to the new value, since you're just using the current value now.. 
fieldModifier.put("set", ModifyScore); 

doc.addField("ID", Mscore); 
doc.addField("Author", fieldModifier); 

solr.add(doc); 
solr.commit(); 
+0

ありがとう@MatsLindh、今すぐユニークなキーのIDフィールドを使用して動作します。しかし、それはインデックスの最初のレコードを見落とし、また、最初のレコードを印刷しません。私はsolrjとsolrの間のどこに問題があるのか​​わかりません。 –

+0

これは、solrDocument1とsolrDocument2を取得するコードを参照しなければ言うことはできませんが、2つのドキュメントの値を比較しているので、最初の繰り返しで有用なものと比較しているわけではありません。 – MatsLindh

+0

ありがとう@MatsLindhコードは長いので、あなたの電子メールをチェックする理由です。私は両方のインデックスのIDを比較しており、それに応じてフィールドを更新します。 –

関連する問題