Я использую Spring Data Elasticsearch и могу успешно выполнить запрос на совпадение, который возвращает некоторые элементы.Я также хотел бы отобразить счет, но он всегда возвращает ноль.
Вот код:
String query = "test";
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(matchQuery("_all", query))
.build();
String scrollId = elasticsearchTemplate.scan(searchQuery, 1000, false);
List<GlobalSearchDTO> sampleEntities = new ArrayList<GlobalSearchDTO>();
boolean hasRecords = true;
while (hasRecords){
Page<GlobalSearchDTO> page = elasticsearchTemplate.scroll(scrollId, 5000L , new SearchResultMapper(){
@Override
public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) {
List<GlobalSearchDTO> out = new ArrayList<>();
GlobalSearchDTO tmp;
ObjectMapper objectMapper = new ObjectMapper();
log.debug("MAX SCORE {}", response.getHits().getMaxScore()); // <-- ZERO
for (SearchHit hit : response.getHits()) {
tmp = new GlobalSearchDTO();
tmp.setId(Long.valueOf(hit.getId()));
tmp.setType(hit.getType());
log.debug("SCORE: {}", hit.getScore()); // <-- ZERO
try {
switch(hit.getIndex()) {
case "document": // map to DTO
tmp.setObj(objectMapper.readValue(hit.getSourceAsString(), Document.class));
break;
case "product": //map to DTO
tmp.setObj(objectMapper.readValue(hit.getSourceAsString(), Product.class));
break;
}
} catch (IOException e) {
e.printStackTrace();
}
out.add(tmp);
}
if (out.size() > 0) {
return new AggregatedPageImpl<T>((List<T>) out);
}
return null;
}
});