diff --git a/src/main/java/com/codeit/todo/domain/Goal.java b/src/main/java/com/codeit/todo/domain/Goal.java index 0a21d60..0c1d548 100644 --- a/src/main/java/com/codeit/todo/domain/Goal.java +++ b/src/main/java/com/codeit/todo/domain/Goal.java @@ -13,6 +13,7 @@ @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(name= "goal", indexes= @Index(name="idx_goal_goal_title", columnList = "goal_title")) public class Goal { @Id diff --git a/src/main/java/com/codeit/todo/domain/User.java b/src/main/java/com/codeit/todo/domain/User.java index 3445ba3..f45d435 100644 --- a/src/main/java/com/codeit/todo/domain/User.java +++ b/src/main/java/com/codeit/todo/domain/User.java @@ -12,6 +12,7 @@ @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(name= "user", indexes= @Index(name="idx_user_name", columnList = "name")) public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/codeit/todo/repository/GoalRepository.java b/src/main/java/com/codeit/todo/repository/GoalRepository.java index 7253577..bbb179e 100644 --- a/src/main/java/com/codeit/todo/repository/GoalRepository.java +++ b/src/main/java/com/codeit/todo/repository/GoalRepository.java @@ -45,6 +45,10 @@ public interface GoalRepository extends JpaRepository { """) Slice findByUserAndHasTodosAfterLastGoalId(@Param("lastGoalId") Integer lastGoalId, @Param("userId") int userId, Pageable pageable, @Param("today") LocalDate today); - List findByGoalTitleContains(@Param("keyword") String keyword); + //List findByGoalTitleContains(@Param("keyword") String keyword); + + + @Query(value = "SELECT * FROM goal WHERE MATCH(goal_title) AGAINST(:keyword IN BOOLEAN MODE) LIMIT 10000", nativeQuery = true) + List searchByFullTextTitle(@Param("keyword") String keyword); } diff --git a/src/main/java/com/codeit/todo/repository/UserRepository.java b/src/main/java/com/codeit/todo/repository/UserRepository.java index d40c1ea..c49af7b 100644 --- a/src/main/java/com/codeit/todo/repository/UserRepository.java +++ b/src/main/java/com/codeit/todo/repository/UserRepository.java @@ -17,5 +17,10 @@ public interface UserRepository extends JpaRepository { Optional findByEmail(String email); - List findByNameContains(@Param("keyword") String keyword); + //@Query(value = "SELECT * FROM user WHERE MATCH(name) AGAINST(:keyword IN BOOLEAN MODE) LIMIT 10000", nativeQuery = true) + //List searchByFullTextName(@Param("keyword") String keyword); + + List findByNameStartingWith(@Param("keyword") String keyword); + + //List findByNameContains(@Param("keyword") String keyword); } diff --git a/src/main/java/com/codeit/todo/service/search/impl/SearchServiceImpl.java b/src/main/java/com/codeit/todo/service/search/impl/SearchServiceImpl.java index cce7847..8288a5f 100644 --- a/src/main/java/com/codeit/todo/service/search/impl/SearchServiceImpl.java +++ b/src/main/java/com/codeit/todo/service/search/impl/SearchServiceImpl.java @@ -48,7 +48,9 @@ public List findUserAndGoal(int userId, ReadSearchRequest re log.info("Starting search for field: {} with keyword: {}", searchField, keyword); if( searchField.equals(SearchField.USER_NAME.getValue()) ){ - List searchedUsers = userRepository.findByNameContains(keyword); + List searchedUsers = userRepository.findByNameStartingWith(keyword); + //List searchedUsers = userRepository.findByNameContains(keyword); + //List searchedUsers = userRepository.searchByFullTextName(keyword); if(searchedUsers.isEmpty()) throw new SearchException(ErrorStatus.toErrorStatus("유저에 대한 검색 결과가 없습니다.", NOT_FOUND)); List responses = searchedUsers.stream() @@ -63,7 +65,8 @@ public List findUserAndGoal(int userId, ReadSearchRequest re return responses; }else if(searchField.equals(SearchField.GOAL_TITLE.getValue())){ - List searchedGoals = goalRepository.findByGoalTitleContains(keyword); + List searchedGoals = goalRepository.searchByFullTextTitle("+" + keyword + "*"); + //List searchedGoals = goalRepository.findByGoalTitleContains(keyword); if(searchedGoals.isEmpty()) throw new SearchException(ErrorStatus.toErrorStatus("목표에 대한 검색 결과가 없습니다.", NOT_FOUND)); Map> userGoalsMap = searchedGoals.stream()