将弹性搜索结果转换为POJO

时间:2017-08-02 23:32:24

标签: elasticsearch spring-boot spring-data-elasticsearch

我有一个使用spring-data-elasticsearch库的项目。我的系统返回结果,但我想知道如何以我的域POJO类的形式获得我的结果。

我没有看到太多关于如何实现这一目标的文档,但我不知道我应该使用Google搜索的正确问题。

目前,我的代码看起来像这样,在我的测试中,它会检索正确的结果,但不会检索到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();

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:6)

一种选择是使用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...
});