통합검색에서 FULLTEXT 검색방법
본문
안녕하세요. 그누에서 많은 도움 받고 있습니다. 감사드립니다.
통합검색 및 게시판 검색 쿼리 속도를 개선하기 위해
search.php 및 common.lib.php 을 손보고 있는데,
아래와 같이 INSTR을 LIKE로 변경한 결과 검색 속도가 30% 이상 개선되었습니다.
그러나, 양쪽 모두 MYSQL 인덱스를 타지 않는 문제가 있어서
그 엄청나다는 FULLTEXT 인덱싱에 도전하고 있습니다.
1. INSTR ---> LIKE로 변경
(기존) $str .= "INSTR{LOWER({$field[$k]}), LOWER('{$search_str}'))"; - 8초 정도 걸림
(변경) $str .= "$field[$k] LIKE '%search_str%'"; - 4초 정도 걸림
2. FULLTEXT INDEXING
(인덱싱)
ALTER TABLE g5_write_**** ADD FULLTEXT INDEX wr_content (wr_content);
ALTER TABLE g5_write_**** ADD FULLTEXT INDEX wr_subject (wr_subject);
(테스트) select * from g5_write_**** where match(wr_content, wr_subject) against('+"검색어1"+"검색어2"' IN BOOLEAN MODE);
-- 이렇게 하니 OR 검색으로 나오네요. 어쨌든 속도는 0.1초 미만으로 매우 만족스럽습니다.
(질문) 통합검색과 게시판에서 FULLTEXT 검색을 진행하고 싶은데
우선은 모든 게시판 테이블에서 wr_subject와 wr_content를 FULLTEXT INDEXING해 준 후,
$str .= "INSTR{LOWER({$field[$k]}), LOWER('{$search_str}'))" 부분 등을 어떻게 처리해 주면 좋을지,
특히 통합검색에서 and나 or를 선택했을 때...
감사합니다.
답변 2
음.... 검색을 어떤식으로 하면 빠를지는 모르겠지만, 일단 간단하게만 설명합니다.
Full-text Search query
- natural search
select * from '테이블명' where match('검색컬럼명') against('검색단어');
- boolean mode search
select * from '테이블명' where match('검색컬럼명') against('검색어*' in boolean mode);
('가나다 내용마바사' 의 형태 검색가능
'가나다내용마바사' 의 형태 검색 불가능)
- query extend search
2단계에 걸처 검색.
1단계 자연어, 검색 후 문자열 재구성 후 두번째 검색
좀 오래된 글 같은데 혹시
search.php 및 common.lib.php 수정하셨으면 부탁좀 드려도 될까요? 저도 2개파일 수정중인데
모든 테이블의 subject와 content필드를 fulltext로 잡지 말고 각 테이블의 특성에 따라 fulltext를 사용하는것과 사용하지 않는것을 구분해야 할거 같습니다. 예를 들어 subject에 명사하나만 들어가는 경우는 일반 index를 잡고 문장으로 들어가는경우는 fulltext 이런식이겠죠.