DB

[MySQL] 전문검색 FullText Search 기능 이용해 검색 구현하기 - AWS RDS innoDB 8.0.28

폭풍저그김탁구 2022. 9. 14. 11:42

 

지금까지 검색 기능에서 LIKE %% 을 이요하고 있었다. 이유는 그냥.. 시간이 없어서...ㅋㅋㅋㅋ

검색 기능을 구현하긴 해야 하는데, 검색 엔진 도입하자니 시간이 없고 데이터 양도 많지 않아서 속도 면에서도 나쁘지 않았다. 

 

엘라스틱 서치 도입하고 싶어서 강의까지 결제했는데 몰아치는 업무에 그냥 방치 중,,

그러다 MySQL에서 제공해주는 전문 검색 기능이 있다는 걸 알게 되었고, 외부 검색 엔진보다 쉽게 도입할 수 있을 것 같아서 스터디 겸 도전해보게 되었다. 

 

* 필자는 AWS의 RDS 서비스를 통해 MySQL을 서비스하고 있다.

 

 

 


 

 

1. 먼저 테스트 테이블을 만들어준다.

나는 이미 덤프 테이블이 하나 있어서 그걸 쓸 예정.

 


 

 

2. 원하는 칼럼에 인덱스를 만들어준다.

MySQL Workbench를 기준으로 설명하겠다. 테이블 설정에서 index 항목에 들어가면 fulltext 인덱스를 추가할 수 있다. parser는 ngram으로 설정할 것.

 

만약 내가 a 칼럼과 b 칼럼에서 동시에 검색을 하고 싶다 하면 

ADD FULLTEXT INDEX `인덱스명` (`칼럼a`, `칼럼b`) WITH PARSER ngram VISIBLE;

이렇게 두 칼럼을 동시에 참조해주면 된다.

 


 

 

 

3. 검색해보기

SELECT * 
FROM TEMP_TABLE
WHERE MATCH(a, b) AGAINST('고기 먹고 싶어요' IN NATURAL LANGUAGE MODE)

처럼 검색하면 '고기' '먹고' '싶어요' 검색의 합집합을 보여준다. (자연어 모드)

정렬을 기본적으로 정확도가 높은 순인 것 같다.

만약 칼럼 하나만 지정해서 인덱스를 만들어줬으면 칼럼 하나만 넣어서 select 하면 된다!

 

나는 구분자 stopword를 그냥 띄어쓰기로 이용했는데, 만약 고도의 검색 엔진 구현을 원한다면 새로운 구분자를 지정해주면 될 것 같다. 

근데 내가 원하는 검색 방향은 띄어쓰기만으로도 충분하고 보통 한글로만 검색을 하기 때문에 굳이 더 설정해주지 않았다. 

 

 

 


 

 

4. 자연어 모드 vs 불리언 모드

뒤에 IN ~ 으로 붙어 있는 게 모드인데, 전문 검색은 자연어 모드(IN NATURAL LANGUAGE MODE) 와 불리언 모드(BOOLEAN MODE) 가 있다.

 

1) 자연어 모드

- 검색어의 키워드가 얼마나 많이 포함돼 있는지에 따라 매치율이 결정되고, 정렬해준다.- 매치율은 '키워드가 얼마나 많이 포함되어 있는가' + '키워드 배치 순서가 얼마나 동일한가' 이다. 여기서 키워드는 검색어에서 구분자로 구분된 단어들을 말한다.

 

2) 불리언 모드- 합집합이 아니라, 키워드의 포함 여부만을 비교하여 true/false로 반환한다.- 자연어는 정확도가 double로 나오고, 불리언은 integer로 나온다고 생각하면 바로 이해가 간다.- AND, OR, NOT 연산을 할 수 있다.

 

원하는 모드를 선택해서 사용하면 된다. 나는 자연어 모드를 사용할 예정이다.

 

 

 


 

 

 

만약 형태소가 잘 구분되어야 하는 엔진을 구축해야 한다면 사전(ex. 은전한닢)을 설치해서 이용하면 된다.하지만 나는 형태소까지 구분해야 하는 문장을 검색할 일이 없기 때문에 굳이 설치하지 않았다.

 

참고)https://blog.naver.com/PostView.nhn?blogId=jjdo1994&logNo=222348191751 

 

[Mysql] 게시판 검색 FULLTEXT with N-GRAM 전문 검색 최적화 (#스터디)

검색 기능이야 말로 없어서는 안될 필수적인 요소이다. 구글,네이버,다음 과 같은 대규모 검색 포털사이트 ...

blog.naver.com

https://hoing.io/archives/16853

 

MySQL FullText Search 전문검색 기능 (1) - 인덱싱 방식 - 빌트인 전문 검색 - Stopword

 

hoing.io