통합검색에서 FULLTEXT 검색방법

통합검색에서 FULLTEXT 검색방법

QA

통합검색에서 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 이런식이겠죠.

답변을 작성하시기 전에 로그인 해주세요.
전체 3

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT