如果要防止两次调用elasticsearch,我建议编写一个自定义的ResultsExtractor:
SearchQuery searchQuery = new NativeSearchQueryBuilder().withIndices(indexName) .withTypes(typeName) .withQuery(queryBuilder) .withPageable(pageable) .build();SearchResult result = template.query(searchQuery, new ResultsExtractor<SearchResult>() { @Override public SearchResult extract(SearchResponse response) { long totalHits = response.getHits() .totalHits(); List<String> ids = new ArrayList<String>(); for (SearchHit hit : response.getHits()) { if (hit != null) { ids.add(hit.getId()); } } return new SearchResult(ids, totalHits); }});System.out.println(result.getIds());System.out.println(result.getCount());其中SearchResult是自定义类:
public class SearchResult { List<String> ids; long count; //getter and setter}这样,您可以从elasticsearch中获取所需的信息
SearchResponse。
关于您的第二个问题:据我所知,在调用
queryForPage(SearchQuery query, Class<T> clazz,SearchResultMapper mapper)传递的类时,不会检查
@document注释。试试看!



