통합검색에서 FULLTEXT 검색방법

통합검색에서 FULLTEXT 검색방법

QA

통합검색에서 FULLTEXT 검색방법

답변 2

본문

안녕하세요. 그누에서 많은 도움 받고 있습니다. 감사드립니다. 

 

통합검색 및 게시판 검색 쿼리 속도를 개선하기 위해 

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 이런식이겠죠.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 28
© SIRSOFT
현재 페이지 제일 처음으로