본문 바로가기
개발 일지/[스파르타] 내일배움캠프 4기

[TIL/내배캠] 60일차 - 2023.01.20 - 다중 키워드 검색

by 코딩하는문어 2023. 1. 27.

오늘은 쇼핑몰 프로젝트 검색기능에서 다중 키워드 검색하는 기능을 추가해보았다.

코드는 구리지만 일단 돌아가게만 만들었다.

 

넘겨 받는 키워드는 스페이스바를 기준으로 하여 배열로 분리하였고,

OR 조건으로 하여 각 단어가 들어있는 모든 아이템을 찾아주도록 하였다.

String[] keywordArr = keyword.split(" ");
// 스페이스 기준으로 keyword 분리

 

JPA repository에 OR 조건으로 찾는 기능도 있었지만,

해당 기능은 키워드 개수가 정해져 있어야 가능한 부분 같아 쓰지 않기로 했다.

OR 조건 이므로 각 키워드 만큼 레파지토리를 검색하고, 중복 제거를 해주었다.

//분리된 키워드는 OR 조건으로 검색됨
List<Seller> sellerList = new ArrayList<>();
for (String key : keywordArr) {
    List<Seller> sellerRepoTemp = switch (searchOption) {
        case "이름" -> sellerRepository.findAllBySellerNameContainsIgnoreCase(key);
        case "별명" -> sellerRepository.findAllByNicknameContainsIgnoreCase(key);
        case "이메일" -> sellerRepository.findAllByEmailContainsIgnoreCase(key);
        case "이름별명" -> sellerRepository.findAllBySellerNameContainsIgnoreCaseOrNicknameContainsIgnoreCase(key, key);
        default -> sellerRepository.findAll();
    };
    sellerList.addAll(sellerRepoTemp);
}

 

중복 제거는 stream의 distinct()를 이용.

return sellerPage.stream()
        .distinct()//중복제거
        .map(SellerListResponseDto::new)
        .collect(Collectors.toList());