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.
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 –
Oui, vous avez raison - vous m'avez mal compris. Je vais modifier mon asnwer. – Ansaldos