Transform Searchhit to Java Object in Elasticsearch
I Am Trying to Retrieve Data Form Es Query and I Am Confused About How Can I Transform Each Hit of Retrieved Data to Java Object. Until Now, I Can Get Each Hit...
I am trying to retrieve data form ES query and I am confused about how can I transform each hit of retrieved data to Java Object. Until now, I can get each hit in JSON format using Gson but I think is useless to transform from Hit to JSON and then to Java Object.
My current code is:
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();
}
}
3 Answers
One line
YourObject yourObject = new com.fasterxml.jackson.databind.ObjectMapper().convertValue(searchHit.getSourceAsMap(), YourObjectClass.class);
I implemented this solution but I am not sure if this is the proper way or not.
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());
}
I am working with Elasticsearch version 7.4.2
SearchHit[] searchHit = response.getHits().getHits();
for (SearchHit hit : searchHit) {
String jsonString=hit.getSourceAsString();
TempClass tmpCl=(TempClass )JSONToObject.parser(jsonString, TempClass .class);
System.out.println(tmpCl.toString());
}
// JSONToObject class
private static Object dc;
public static Object parser(String file, Class<?> cls) {
try {
Gson gson = new Gson();
dc = gson.fromJson(file, cls);
} catch (Exception e) {
e.printStackTrace();
}
return dc;
}