MySQL Full-Text Search 6 MySQL

6. 파인 튜닝 MySQL 풀텍스트 검색

MySQL의 전체 텍스트 검색 기능에는 사용자가 조정할 수있는 매개 변수가 거의 없습니다. MySQL 소스 배포판을 사용하는 경우 전체 텍스트 검색 동작을보다 강력하게 제어 할 수 있습니다. 일부 변경 사항에는 소스 코드 수정이 필요하기 때문입니다. Section 2.9, "소스에서 MySQL 설치하기"를 참조하십시오.

전체 텍스트 검색은 신중하게 조정되어 가장 효과적입니다. 대부분의 경우 기본 동작을 수정하면 실제로 효과가 줄어들 수 있습니다. 자신이하는 일을 모르는 경우 MySQL 소스를 변경하지 마십시오.

이 절에서 설명하는 대부분의 전체 텍스트 변수는 서버 시작시 설정해야합니다. 서버를 다시 시작하려면 서버를 다시 시작해야합니다. 서버가 실행 중일 때는 수정할 수 없습니다.

변수를 변경하려면 테이블에서 FULLTEXT 인덱스를 다시 작성해야합니다. 이렇게하기위한 지침은이 섹션의 뒷부분에 나와 있습니다.

- 인덱싱 할 단어의 최소 및 최대 길이는 시스템 변수 ft_min_word_len 및 ft_max_word_len에 의해 정의됩니다. (5.1.7 절. "서버 시스템 변수"를 참조하십시오.) 기본 최소값은 4 자입니다. 기본 최대 값은 버전에 따라 다릅니다. 두 값 중 하나를 변경하면 FULLTEXT 인덱스를 다시 작성해야합니다. 예를 들어, 3 문자 단어를 검색 할 수있게하려면 다음 행을 옵션 파일에 넣어 ft_min_word_len 변수를 설정할 수 있습니다.
[mysqld]ft_min_word_len=3
그런 다음 서버를 다시 시작하고 FULLTEXT 인덱스를 다시 작성하십시오. 이 목록에 나오는 지침에서 myisamchk과 관련된주의 사항에 특히 유의하십시오.

- 기본 중지 단어 목록을 무시하려면 ft_stopword_file 시스템 변수를 설정하십시오. (5.1.7 절. "서버 시스템 변수"참조) 변수 값은 스톱 워드 목록을 포함하는 파일의 경로 이름이거나 스톱 워드 필터링을 비활성화하는 빈 문자열이어야합니다. 다른 디렉토리를 지정하기 위해 절대 경로 이름이 제공되지 않으면 서버는 데이터 디렉토리에서 파일을 찾습니다. 이 변수의 값이나 stopword 파일의 내용을 변경 한 후 서버를 다시 시작하고 FULLTEXT 인덱스를 다시 작성하십시오.

정지 단어 목록은 자유 형식입니다. 즉, 개행 문자, 스페이스 또는 쉼표와 같은 영숫자가 아닌 문자를 사용하여 불용어를 구분할 수 있습니다. 예외는 단어의 일부로 취급되는 밑줄 문자 (_)와 단일 아포스트로피 ( ')입니다. 중지 단어 목록의 문자 집합은 서버의 기본 문자 집합입니다. 10.3.2 절. "서버 문자 집합과 데이터 정렬"부분을 참조하십시오.
- 자연 언어 검색의 50 % 임계 값은 선택한 특정 가중치 체계에 의해 결정됩니다. 이것을 사용하지 않으려면 storage / myisam / ftdefs.h에서 다음 라인을 찾으십시오 :
#define GWS_IN_USE GWS_PROB

Change that line to this:

#define GWS_IN_USE GWS_FREQ

그런 다음 MySQL을 다시 컴파일하십시오. 이 경우 색인을 다시 작성할 필요가 없습니다.

노트
이 변경을하면 MATCH () 함수에 대한 적절한 관련성 값을 제공하는 MySQL의 기능이 심각하게 저하됩니다. 그러한 일반적인 단어를 정말로 검색해야하는 경우 대신 IN BOOLEAN MODE를 사용하여 검색하는 것이 좋으며 50 % 임계 값을 준수하지 않습니다.

- 부울 전체 텍스트 검색에 사용되는 연산자를 변경하려면 ft_boolean_syntax 시스템 변수를 설정하십시오. 이 변수는 서버가 실행 중일 때 변경할 수 있지만 전역 시스템 변수를 설정할 수있는 권한이 있어야합니다 (5.1.8.1 절. "시스템 변수 권한"참조). 이 경우 색인을 다시 작성할 필요가 없습니다. 이 변수를 설정하는 방법을 설명하는 규칙을 설명하는 5.1.7 절. "서버 시스템 변수"를 참조하십시오.
- 단어 문자로 간주되는 문자 집합을 변경하려면 다음 목록에서 설명하는 것처럼 여러 가지 방법으로 변경할 수 있습니다. 수정 한 후에는 FULLTEXT 인덱스를 포함하는 각 테이블의 인덱스를 다시 빌드해야합니다. 하이픈 문자 ( '-')를 단어 문자로 취급한다고 가정합니다. 다음 방법 중 하나를 사용하십시오.
. MySQL 소스 수정 : storage / myisam / ftdefs.h에서 true_word_char () 및 misc_word_char () 매크로를 참조하십시오. 해당 매크로 중 하나에 '-'를 추가하고 MySQL을 다시 컴파일하십시오.

. 문자 집합 파일 수정 : 다시 컴파일 할 필요가 없습니다. true_word_char () 매크로는 "문자 유형"테이블을 사용하여 다른 문자와 문자 및 숫자를 구별합니다. . 문자 세트 XML 파일 중 하나에서 <ctype> <map> 배열의 내용을 편집하여 '-'가 "문자"임을 지정할 수 있습니다. 그런 다음 FULLTEXT 색인에 주어진 문자 세트를 사용하십시오. <ctype> <map> 배열 형식에 대한 정보는 10.12.1 절. "문자 정의 배열"에서 참조하십시오.

. 인덱스 된 열에서 사용하는 문자 집합에 대해 새 데이터 정렬을 추가하고 해당 데이터 정렬을 사용하도록 열을 변경합니다. 데이터 정렬 추가에 대한 일반적인 정보는 10.13 절. "문자 집합에 데이터 정렬 추가"에서 참조하십시오. 전체 텍스트 인덱싱 관련 예제는 12.9.7 절. "전체 텍스트 인덱싱을위한 데이터 정렬 추가"에서 참조하십시오.

인덱싱 (ft_min_word_len, ft_max_word_len 또는 ft_stopword_file)에 영향을 미치는 전체 텍스트 변수를 수정하거나 중지 단어 파일 자체를 변경하는 경우 변경 한 후 서버를 다시 시작한 후에 FULLTEXT 인덱스를 다시 작성해야합니다. 이 경우 인덱스를 다시 작성하려면 QUICK 복구 작업을 수행하면 충분합니다.
mysql> REPAIR TABLE tbl_name QUICK;

또는 ALTER TABLE에 DROP INDEX 및 ADD INDEX 옵션을 사용하여 각 FULLTEXT 인덱스를 삭제하고 다시 작성하십시오. 경우에 따라 수리 작업보다 빠를 수도 있습니다.

FULLTEXT 인덱스를 포함하는 각 테이블은 표시된 것처럼 복구해야합니다. 그렇지 않으면 테이블에 대한 쿼리가 잘못된 결과를 초래할 수 있으며 테이블을 수정하면 서버가 테이블을 손상되어 복구가 필요한 것으로 간주합니다.

myisamchk를 사용하여 복구 또는 분석과 같은 테이블 인덱스를 수정하는 작업을 수행하는 경우 별도로 지정하지 않으면 FULLTEXT 인덱스가 최소 단어 길이, 최대 단어 길이 및 중지 단어 파일에 대한 기본 전체 텍스트 매개 변수 값을 사용하여 재구성됩니다. 이로 인해 쿼리가 실패 할 수 있습니다.

이 매개 변수는 서버에서만 인식되기 때문에 문제가 발생합니다. 그들은 MyISAM 인덱스 파일에 저장되지 않습니다. 서버가 사용하는 최소 또는 최대 단어 길이 또는 중지 단어 파일 값을 수정 한 경우 문제가 발생하지 않도록하려면 mysqld에 사용하는 myisamchk에 대해 동일한 ft_min_word_len, ft_max_word_len 및 ft_stopword_file 값을 지정하십시오. 예를 들어, 최소 단어 길이를 3으로 설정 한 경우 다음과 같이 myisamchk를 사용하여 테이블을 복구 할 수 있습니다.

shell> myisamchk --recover --ft_min_word_len=3 tbl_name.MYI
myisamchk와 서버가 전체 텍스트 매개 변수에 동일한 값을 사용하게하려면 옵션 파일의 [mysqld]와 [myisamchk] 섹션에 각각을 넣으십시오 :

[mysqld]ft_min_word_len=3[myisamchk]ft_min_word_len=3

인덱스 수정에 myisamchk를 사용하는 대신 REPAIR TABLE, ANALYZE TABLE, OPTIMIZE TABLE 또는 ALTER TABLE 문을 사용할 수 있습니다. 이 문은 사용할 전체 텍스트 매개 변수 값을 알고있는 서버에서 수행합니다.



덧글

댓글 입력 영역