Elasticsearch返回原始JSON使用Java API
问题描述:
我在春天web应用程序如下要求:
Elasticsearch返回原始JSON使用Java API
- 找到Elasticsearch对象和谷歌地图上显示出来(JSON格式首选)
- 找到对象(同从Elasticsearch如上查询),并在列表中显示出来(Java对象格式首选,以显示它的JSP页)
我使用SearchRequestBuilder用JAVA写的API搜索和它工作得很好:
SearchRequestBuilder request = client.prepareSearch("index").setTypes("type")
.setSearchType(SearchType.QUERY_THEN_FETCH).setFrom(0).setSize(10).addFields(RESPONSE_FIELDS);
//request is much more complicated
//...
SearchResponse response = request.execute().actionGet();
SearchHits hits = response.getHits();
但对于谷歌地图上显示它,我宁愿只是得到JSON对象从elasticsearch代替SearchResponse对象是这样的:
{
"_index": "indexName",
"_type": "type",
"_id": "9094",
"_version": 31,
"found": true,
"_source": {
//list of properties
}
}
是否可以使用Java API + SearchRequestBuilder获得JSON响应或我必须为此使用REST API?
答
Java API不会映射到json(或其他任何实体)。但是,你可以这样做:
- 使用spring-data-elasticsearch直接反序列化到一个实体
- 采取从Java API的响应和分析使用的东西,以JSON像Jackson
- 考虑使用jest Api这将返回gson(Googles json)。
您可以使用jayway路径来解析SearchHit.getSource(它也与像Jackson和SmartJSON这样的Mappers集成映射回类/对象,反之亦然)。我觉得保持NoSQL数据库类型不可知的重要性,比如Elastic。不要过于努力地制造“多种类型”。 – Dexter