我使用RestHighLevelClient搜索和检索List<Map<String,Object>>中的数据。
final SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
RestStatus statusCode = response.status();
log.info("Status code : {} ", statusCode.getStatus());
if(RestStatus.OK.equals(response.status())) {
final SearchHits hits = response.getHits();
Long totalHits = hits.getTotalHits();
log.info("Total number of hits : {} ", totalHits);
final SearchHit[] results = hits.getHits();
List<Map<String, Object>> list = new ArrayList<>(totalHits.intValue());
for(SearchHit hit : results) {
final Map<String, Object> sourceAsMap = hit.getSourceAsMap();
list.add(sourceAsMap);
}
return list;
}
字符串
ElasticSearchClient中search()的签名是不同的。它需要提供Class作为方法参数的一部分。在我的情况下,我不想将其转换为任何具体对象。我尝试使用“Object.class”(例如elasticSearchClient.search(searchRequest,Object.class))。但它没有提供我在RestHighLevelClient中使用的Map列表。我的问题是如何提取List<Map <String,使用新的API从响应中调用对象>>?
SearchResponse<Object> response = elasticSearchClient.search(searchRequest, Object.class);
List<Hit<Object>> hits = response.hits().hits();
for (Hit<Object> hit : hits) {
// how do I get Map<String, Object> here?
}
型
2条答案
按热度按时间1zmg4dgp1#
我可以将其转换为Map.class以获得预期的结果。
字符串
z4bn682m2#
你也可以使用
ObjectNode
类:字符串
来源:文件