2017-09-01 1 views
0

J'utilise l'API Java pour ElasticSearch. J'essaye de mettre en valeur mes champs mais ça ne marche pas. Les résultats corrects qui correspondent au terme de recherche sont renvoyés, il y a donc du contenu à mettre en évidence, mais il ne le fera tout simplement pas. Je tournai ma SearchResponse et HighlightBuilder comme ceci:Java Recherche élastique: Highlighter ne fonctionne pas

QueryBuilder matchQuery = simpleQueryStringQuery(searchTerm); 
    ... 
    HighlightBuilder highlightBuilder = new HighlightBuilder() 
      .postTags("<highlight>") 
      .preTags("</highlight>") 
      .field("description"); 

    SearchResponse response = client.prepareSearch("mediaitems") 
      .setTypes("mediaitem") 
      .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) 
      .setQuery(matchQuery)     // Query 
      .setFrom(from) 
      .setSize(pageSize) 
      .setExplain(true) 
      .highlighter(highlightBuilder) 
      .get(); 

et dans mon JSON-> Code POJO, je vérifier quels champs ont été mis en évidence, mais la carte retournée est vide.

Arrays.stream(hits).forEach((SearchHit hit) -> { 
     String source = hit.getSourceAsString(); 
     Map<String, HighlightField> highlightFields = hit.getHighlightFields(); 
     try { 
      MediaItem mediaItem = objectMapper.readValue(source, MediaItem.class); 
      mediaItemList.add(mediaItem); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    }); 

Pourquoi diable ma requête de mise en surbrillance est-elle ignorée?

Toute aide est grandement appréciée.

Répondre

0

Vous devez définir le champ en surbrillance dans HighlightBuilder.

Par exemple:

HighlightBuilder.Field field = new HighlightBuilder.Field(fieldName); 
highlightBuilder.field(field); 

J'ai vu que vous utilisez simple requête chaîne de requête, de sorte que vous pouvez effectuer les opérations suivantes:

Your query string: fieldname: searched text 

Ainsi, par exemple votre chaîne de requête est la suivante:

price: >2000 && city: Manchaster 

Avec cette chaîne de requête, vous avez également spécifié les champs de la requête. Maintenant, le surligneur devrait fonctionner.

+0

Il n'y a pas de place pour utiliser un HighlightBuilder avec un QueryBuilder. https://github.com/elastic/elasticsearch/blob/master/core/src/main/java/org/elasticsearch/index/query/QueryBuilder.java –

+0

Oui, vous avez raison - vous m'avez mal compris. Je vais modifier mon asnwer. – Ansaldos