【发布时间】:2020-03-10 06:25:59
【问题描述】:
我正在尝试从 ES 查询中检索数据,但我很困惑如何将检索到的每个命中数据转换为 Java 对象。 到目前为止,我可以使用 Gson 以 JSON 格式获取每个命中,但我认为从 Hit 转换为 JSON 再转换为 Java Object 是没有用的。
我当前的代码是:
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();
}
}
【问题讨论】:
-
我不确定你想在那里实现什么。您实际上已经拥有了 java 对象(名为 results 的 SearchHit 数组)。您想获得对 SearchHit 的子对象的引用吗?
-
有没有直接的方法将 SearchHit 映射到另一个对象?还是需要实现构造函数?
-
如果你在这里看到 stackoverflow.com/a/30376770/4343294 你从 SearchHit 检索 JSON 对象
-
哦,我明白了.. 您想获取 SearchHit 的来源并将其映射到另一个自定义对象吗?还是您需要整个 SearchHit?
-
此代码有效:SearchHit[] results = response.getHits().getHits(); for (SearchHit hit : results) { String sourceAsString = hit.getSourceAsString(); Map
responseFields = hit.getFields(); SearchHitField 字段 = responseFields.get("product_id");地图地图 = hit.getSource(); System.out.println(map.toString()); }
标签: java json elasticsearch