将弹性搜索结果转换为 POJO
Convert Elastic Search Results to POJO
我有一个使用 spring-data-elasticsearch 库的项目。我的系统返回了结果,但我想知道如何以域 POJO class.
的形式获取结果
我没有看到太多关于如何完成此操作的文档,但我不知道应该使用谷歌搜索正确的问题是什么。
目前,我的代码看起来像这样,在我的测试中,它检索了正确的结果,但不是作为 POJO。
QueryBuilder matchQuery = QueryBuilders.queryStringQuery(searchTerm).defaultOperator(QueryStringQueryBuilder.Operator.AND);
Client client = elasticsearchTemplate.getClient();
SearchRequestBuilder request = client
.prepareSearch("mediaitem")
.setSearchType(SearchType.QUERY_THEN_FETCH)
.setQuery(matchQuery)
.setFrom(0)
.setSize(100)
.addFields("title", "description", "department");
System.out.println("SEARCH QUERY: " + request.toString());
SearchResponse response = request.execute().actionGet();
SearchHits searchHits = response.getHits();
SearchHit[] hits = searchHits.getHits();
非常感谢任何帮助。
一种选择是使用 jackson-databind
将 JSON 从搜索命中映射到 POJO。
例如:
ObjectMapper objectMapper = new ObjectMapper();
SearchHit[] hits = searchHits.getHits();
Arrays.stream(hits).forEach(hit -> {
String source = hit.getSourceAsString();
MediaItem mediaItem = objectMapper.readValue(source, MediaItem.class);
// Use media item...
});
我有一个使用 spring-data-elasticsearch 库的项目。我的系统返回了结果,但我想知道如何以域 POJO class.
的形式获取结果我没有看到太多关于如何完成此操作的文档,但我不知道应该使用谷歌搜索正确的问题是什么。
目前,我的代码看起来像这样,在我的测试中,它检索了正确的结果,但不是作为 POJO。
QueryBuilder matchQuery = QueryBuilders.queryStringQuery(searchTerm).defaultOperator(QueryStringQueryBuilder.Operator.AND);
Client client = elasticsearchTemplate.getClient();
SearchRequestBuilder request = client
.prepareSearch("mediaitem")
.setSearchType(SearchType.QUERY_THEN_FETCH)
.setQuery(matchQuery)
.setFrom(0)
.setSize(100)
.addFields("title", "description", "department");
System.out.println("SEARCH QUERY: " + request.toString());
SearchResponse response = request.execute().actionGet();
SearchHits searchHits = response.getHits();
SearchHit[] hits = searchHits.getHits();
非常感谢任何帮助。
一种选择是使用 jackson-databind
将 JSON 从搜索命中映射到 POJO。
例如:
ObjectMapper objectMapper = new ObjectMapper();
SearchHit[] hits = searchHits.getHits();
Arrays.stream(hits).forEach(hit -> {
String source = hit.getSourceAsString();
MediaItem mediaItem = objectMapper.readValue(source, MediaItem.class);
// Use media item...
});