es에 복잡한 쿼리를 날리기 위해서 보통 QueryBuilders를 활용해서 간편하게 문자열을 만들 수 있습니다. 이때 페이징 처리를 하기 위해서는 조회하고자 하는 query를 만든 다음다음과 같이 해결했습니다.
private final SearchOperations searchOperations;
NativeSearchQuery result = new NativeSearchQueryBuilder()
.withFields(fields)
.withPageable(PageRequest.of(Math.toIntExact(pageable.getOffset()), pageable.getPageSize()))
.withSort(Sort.by("id").descending()) //desc or asc
.withQuery(resultQuery)
.build();
List<SearchHit<dataDto>> data = searchOperations.search(result, dataDto.class, IndexCoordinates.of("index")).getSearchHits();
long count = searchOperations.count(result, IndexCoordinates.of("index")); // 해당 조건의 결과 데이터 갯수
List<dataDto> results = new ArrayList<>();
data.forEach(t -> results.add(t.getContent()));
return new PageImpl<>(results, pageable, count);
'Springboot' 카테고리의 다른 글
탬플릿 메서드 패턴 (0) | 2023.08.14 |
---|---|
Springboot/ ThreadLocal (0) | 2023.08.14 |
JPA update시에 dto null 체크및 feild 유무 판단하는 util class (0) | 2022.10.28 |
JPA/지연로딩과 즉시로딩 개념과 권장 사용법 정리, 그리고 OneToOne의 지연로딩 (0) | 2022.10.21 |
JDBCTemplate는 동시성문제를 개발자가 직접 해결해 줘야하나? (0) | 2022.10.21 |