2017-06-08 29 views
0

我正在嘗試檢索數據表單ES查詢,我對如何將每次檢索到的數據轉換爲Java對象感到困惑。 到現在爲止,我可以使用Gson獲取每個JSON格式的命中,但我認爲從命中轉換爲JSON然後轉換爲Java對象是沒有用的。在ElasticSearch中將SearchHit轉換爲Java對象

我當前的代碼是:

TransportClient client = new PreBuiltTransportClient(Settings.EMPTY) 
      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300)); 
    Settings settings = Settings.builder() 
      .put("cluster.name", "elasticsearch") 
      .put("path.home", "/Users/user/Apps/elasticsearch-5.4.1") 
      .build(); 

    QueryBuilder qb = termQuery("price", 12); 
    SearchResponse response = client.prepareSearch("kal").setTypes("products") 
      .setSearchType(SearchType.DEFAULT) 
      .setQuery(qb) 
      .get(); 

    SearchHit[] results = response.getHits().getHits(); 
    for (SearchHit hit : results) { 
     String sourceAsString = hit.getSourceAsString(); 
     Map<String, SearchHitField> responseFields = hit.getFields(); 
     if (sourceAsString != null) { 
      Gson gson = new GsonBuilder().setDateFormat(sourceAsString) 
        .create(); 
     } 
    } 
+0

我不確定你在那裏試圖達到什麼目的。你實際上已經有了java對象(SearchHit數組命名爲results)。你想獲得對SearchHit的子對象的引用嗎? –

+0

有沒有直接的方法將SearchHit映射到另一個對象? 或者你需要實現構造函數? – pik4

+0

如果您在這裏看到 https://stackoverflow.com/a/30376770/4343294 您從SearchHit檢索JSON對象 – pik4

回答

1

我實現了這個解決辦法,但我不知道這是否是正確的方法還是不行。

SearchHit[] results = response.getHits().getHits(); 
    for (SearchHit hit : results) { 
     String sourceAsString = hit.getSourceAsString(); 
     Map<String, SearchHitField> responseFields = hit.getFields(); 
     SearchHitField field = responseFields.get("product_id"); 
     Map map = hit.getSource(); 
     System.out.println(map.toString()); 
    }