2017-08-02 1 views
0

J'ai un projet en utilisant la bibliothèque spring-data-elasticsearch. Mon système a renvoyé des résultats, mais je me demandais comment obtenir mes résultats sous la forme de ma classe de domaine POJO.Convertir les résultats de recherche élastique à POJO

Je ne vois pas trop de documentation sur la façon d'accomplir cela, mais je ne sais pas quelle est la bonne question pour laquelle je devrais chercher Google.

Actuellement, mon code ressemble à ceci, et dans mes tests, il récupère les bons résultats, mais pas en tant que 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(); 

Toute aide est grandement appréciée.

Répondre

2

Une option consiste à utiliser jackson-databind pour mapper JSON à partir des résultats de recherche vers POJO.

Par exemple:

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... 
});