티스토리 뷰
728x90
1. 이론은 대해서는 생략한다.
2. MySQL은 index에서 full text 검색을 지원해서 index를 full text로 설정하고 검색 대상이 될 컬럼을 지정해서 인덱스를 만들면 된다.
3. PostgreSQL은 약간 다른데 특정한 데이터 타입의 컬럼을 추가하여 그 컬럼을 지정해서 검색하는 방식이다.
4. 내용이 별거 없어서 아래 참고하면 된다.
5. 사실 스프링을 사용하면 Hibernate에서 full text search를 지원하는데, Apache Lucene 엔진을 사용한다. 하지만, 설정이 필요하고 파일시스템에 저장하는 방식을 사용하기 때문에 간편함을 추구하다가 더 불편해 질 수도 있다. 개인적으로는 데이터베이스에서 지원하는 것을 사용하는 것을 선호하는데 결국 선택의 문제다.
# 자연어 검색을 위한 특수한 컬럼을 추가
ALTER TABLE catalog.products ADD COLUMN search_column tsvector;
# 검색이 대상이 될 컬럼들을 묶어서 tsvector로 변환한다.
UPDATE catalog.products SET search_column = to_tsvector('english', name || ' ' || full_description || ' ' || short_description);
# 인덱스를 생성하여 검색 속도를 높인다.
CREATE INDEX products_search_vector_idx ON catalog.products USING gin(search_column);
# 쿼리를 만들어 사용한다. 여기서는 Samsung을 검색어로 검색하였다.
SELECT * FROM catalog.products WHERE search_column @@ to_tsquery('english', 'Samsung');
# 아래의 스프링 쿼리로 변환하여 사용한다.
@Query(
value = "SELECT * " +
"FROM catalog.products " +
"WHERE search_vector @@ to_tsquery('english', :keyword) " +
" AND status='ACTIVE' ",
nativeQuery = true
)
fun findAllWithKeywordFullText(
keyword: String,
pageable: Pageable
): Page<ProductEntity>
728x90
'Spring > Hibernate' 카테고리의 다른 글
Hibernate : @Lob (Large Object) (0) | 2020.07.28 |
---|---|
Hibernate : Hibernate DDL Auto (0) | 2020.07.27 |
Hibernate Basic : Bi-directional 관계 Entity의 JSON 재귀적 호출 해결 (0) | 2020.06.11 |
Hibernate Advanced : 상속 매핑 - Mapped Superclass Strategy (0) | 2020.06.06 |
Hibernate Advanced : 상속 매핑 - Joined Table Strategy (0) | 2020.06.06 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
TAG
- crud
- Validation
- Angular
- one-to-many
- 매핑
- WebMvc
- 설정하기
- form
- XML
- 로그인
- MYSQL
- one-to-one
- 상속
- Spring
- Rest
- Many-To-Many
- 자바
- 스프링
- RestTemplate
- 설정
- mapping
- Security
- Spring Security
- spring boot
- 하이버네이트
- login
- 스프링부트
- 외부파일
- hibernate
- jsp
250x250