초안 : 22.01.13
2차 수정 : 22.03.21 (Full-text seach 내용 추가)
1. Like 로 찾기
keyword를 바탕으로 콜키지 매장-이름, 주소 중 일치하는 단어가 있는지 확인해서 List로 반환
=> db의 name
, addr
의 빈칸을 모두 제거한 뒤 "%"+keyword+"%" 와 일치하는 데이터가 있는지 확인(LIKE
)
String sql = "SELECT * FROM corkage_store ck" +
" WHERE replace(ck.addr, ' ', '') LIKE :keyword" +
" OR replace(ck.name, ' ', '') LIKE :keyword";
List result = em.createNativeQuery(sql, CorkageStore.class)
.setParameter("keyword", keyword)
.getResultList();
하지만 몇 만개 이상의 데이터에서 조회하는 경우 성능적인 면에서 좋지 않기 때문에 where~like 쿼리를 사용한다면 데이터베이스의 범위를 나눠서 일부분만 우선 조회하는 것도 방법이다.
2. Full-text search 로 찾기
Full-text search는 키워드가 포함된 결과를 보여주는 기능으로, mySQL에서 full-text search를 지원하고 있다.
MATCH (col1,col2,col3...) AGAINST (expr [search_modifier])
: 키워드 검색을 통해 관련 있는 결과를 보여주는 기능
- 대표적인 전체 텍스트 검색 플랫폼 : Elasticsearch, solr
- MySQL은 full-text search를 지원함.
역인덱스(Inverted Index)
stop 단어(with, the, in ..)를 제외한 단어들을 inverted index로 변환하여 전체 텍스트 검색이 가능하도록 할 수 있다.
- 검색 엔진 개발에서 inverted index는 가장 많이 사용되는 자료구조 중 하나
- Elasticsearch에서 사용됨.
'Server' 카테고리의 다른 글
Javascript/Typescript 기본 문법 정리 (0) | 2022.02.11 |
---|---|
[Spring-boot] @RestController 와 @Controller (0) | 2022.02.02 |
[Flutter] pagination: 스크롤 시 추가 데이터 로딩하기(무한스크롤) (0) | 2022.01.25 |
[spring-boot] application.properties-dev로 실행하기 (0) | 2022.01.19 |
[Spring-boot] @RequestBody, @ResponseBody : HTTP body에 데이터 송수신하기 (0) | 2021.12.28 |