2017-07-27 75 views
0

ElasticSearch 5.4.1 Java API:正確更新但updateResponse.getResult()爲null,我檢查該對象,並且響應已更新但getResponse ()= null,ElasticSearch 5.4.1 Java API:ErrorResponse.getResult()中的錯誤爲空,

換句話說結果很好,但我可以訪問。這裏是我的代碼:

UpdateResponse response = esClient.prepareUpdate(INDEX, TYPE, id).setDoc(jsonPoste).get(); 

enter image description here

+0

您可以發佈您的代碼,你建UpdateRequest?你可能錯過了'fetchSource'或'fields'聲明?對我來說有意義的是,更新請求不會返回未明確請求的數據。將不需要開銷來加載它。 – Slomo

回答

1

它有點老,但在ES'論壇'中有this文章。

顯然你必須在請求中指定,如果你想得到結果。否則,updateRequest將更新並返回'UPDATED'(或其他代碼)作爲結果。首先想到,這是有道理的,因爲爲什麼從硬盤加載不必要的/未請求的數據。

無論如何,增加.setFetchSource(true)您的要求應該做的伎倆:

UpdateResponse response = esClient.prepareUpdate(INDEX, TYPE, id) 
          .setDoc(jsonPoste).setFetchSource(true).get(); 
0

我只是想幫你,但我沒有太多的聲譽,所以我不能發表評論...

無論如何,我發現一個文檔和「UpdateResponse」類文件中相關的源文件。

[複製從上部的github代碼]

  • UpdateResponse updateResponse =新UpdateResponse(新ReplicationResponse.ShardInfo(3,2),
  • new ShardId(「books」,「books_uuid」,2 ),「書」,「1」,7,2,更新); (GetResult(「books」,「book」,「1」,2,true,source,fields)); +
  • String output = Strings.toString(updateResponse);
  • assertEquals(「{\」_ index \「:\」books \「,\」_ type \「:\」book \「,\」_ id \「:\」1 \「,\」_ version \「:2 ,「結果」:「更新」,「+
  • 」\「_ shards \」:{\「total \」:3,\「successful \」:2,\「failed \」:0} ,\「_ seq_no \」:7,\「get \」:{\「found \」:true,「+
  • 」\「_ source \」:{\「title \」:\「Book title \ \「ABC \ 123 \」},\「字幕\」:{\「isbn \」:[\「ABC」
  • 「title \」]}}}「,output);

有測試一些代碼,所以我認爲你可以使用這個測試代碼測試代碼。我建議你在使用「getResult()」方法之前使用「toSting()」方法。它可以更容易找到什麼是錯的。

祝您有美好的一天!