Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Academy] 학원 이름 검색, 자동 완성 구현 및 중심 위치 변경에 따라 반경 이내에 존재하는 학원 목록 구현 #25

Merged
merged 32 commits into from
Nov 5, 2023

Conversation

byeolhaha
Copy link
Member

구현 내용

  • 학원 이름 검색, 자동 완성 구현
    • FullText Index(ngram parser 이용)를 통해서 구현하였습니다.
       @Query(value = "SELECT a.id AS academyId, a.academy_name AS academyName, a.full_address AS fullAddress, a.latitude, a.longitude " +
              "FROM academies As a " +
              "WHERE MATCH(a.academy_name) AGAINST(:academyName IN BOOLEAN MODE)",
              countQuery = "SELECT COUNT(a.id) FROM academies As a WHERE MATCH(a.academy_name) AGAINST(:academyName IN BOOLEAN MODE)",
              nativeQuery = true)
      Slice<AcademiesByName> findAcademiesByName(@Param("academyName") String academyName, Pageable pageable);
    • 토큰 사이즈가 default로 2여서 두 글자로 검색했을 때 자동 완성이 시작되어 토큰 사이즈를 1로 변경하는 작업 필요
    • sql 자동실행으로 구현되도록 resources/sql/data안에 sql 쿼리를 놓았고

      yml 파일에 아래와 같이 추가하였습니다.
       sql:
         init:
           mode: always
           continue-on-error: true
           data-locations: classpath:sql/data/academies.sql
      
  • 중심 위치 변경에 따라 반경 이내에 존재하는 학원 목록 구현
    • 하버사인 공식에 따라 중심 위치를 바탕으로 반경 2km에 있는 북동쪽, 북서쪽의 위도, 경도를 알아내고
    • 이에 따라 중심 위치에 해당하는 대각선의 길이를 구할 수 있습니다.
    • 이 대각선은 공간 데이터 중에서 LineString에 해당되며
    • 이 대각선을 포함하는 사각형 내부에 있는 학원들을 반환합니다.
      Query query = em.createNativeQuery(
                "SELECT a.id AS academyId, a.academy_name AS academyName, a.contact , a.full_address AS fullAddress, a.area_of_expertise AS areaOfExpertise FROM academies AS a " +
                        "WHERE MBRContains(ST_LINESTRINGFROMTEXT(" + pointFormat + ", a.point)=1");

고민했던 점

  • test 환경에서 반경 2km이내의 학원 데이터들을 랜덤으로 만들어야 했습니다.
    그래서 이를 구현하는 RandomLocationGenerator를 구현하였습니다.
    -test 환경에서 FullText Index를 찾을 수 없다는 오류가 발생하여 jpa.hibernate.ddl-auto: update로 하였습니다.
    (create이면 실패, update이면 성공)

@byeolhaha byeolhaha self-assigned this Nov 5, 2023
@byeolhaha byeolhaha added the enhancement New feature or request label Nov 5, 2023
Copy link
Contributor

@wonu606 wonu606 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

일단 approve 추후에 검토예정!

@byeolhaha byeolhaha merged commit 410bee4 into develop Nov 5, 2023
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants