代码之家  ›  专栏  ›  技术社区  ›  Black Dynamite

将弹性搜索结果转换为POJO

  •  4
  • Black Dynamite  · 技术社区  · 8 年前

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

    目前,我的代码看起来像这样,在我的测试中,它检索正确的结果,但不是作为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 回复  |  直到 8 年前
        1
  •  11
  •   ck1    8 年前

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