Loading...
MySQL 9.5 Reference Manual 9.5의 14.9 Full-Text Search Functions의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
14.9.1 Natural Language Full-Text Searches 14.9.2 Boolean Full-Text Searches 14.9.3 Full-Text Searches with Query Expansion 14.9.4 Full-Text Stopwords 14.9.5 Full-Text Restrictions 14.9.6 Fine-Tuning MySQL Full-Text Search 14.9.7 Adding a User-Defined Collation for Full-Text Indexing 14.9.8 ngram Full-Text Parser 14.9.9 MeCab Full-Text Parser Plugin
MATCH (col1,col2,...) AGAINST (expr [search_modifier])
1search_modifier: 2 { 3 IN NATURAL LANGUAGE MODE 4 | IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION 5 | IN BOOLEAN MODE 6 | WITH QUERY EXPANSION 7 }
MySQL은 전문 인덱싱(full-text indexing) 및 검색(searching)을 지원합니다:
MySQL에서 전문 인덱스는 FULLTEXT 타입의 인덱스입니다.
전문 인덱스는 InnoDB 또는
MyISAM 테이블에서만 사용할 수 있으며,
CHAR,
VARCHAR, 또는
TEXT 컬럼에 대해서만 생성할 수 있습니다.
MySQL은 중국어, 일본어, 한국어(CJK)를 지원하는 내장 전문 ngram 파서와 일본어용 설치형 MeCab 전문 파서 플러그인을 제공합니다. 파싱 차이점은 Section 14.9.8, “ngram Full-Text Parser” 및 Section 14.9.9, “MeCab Full-Text Parser Plugin”에 설명되어 있습니다.
FULLTEXT 인덱스 정의는 테이블을 생성할 때
CREATE TABLE 구문에서 지정할 수 있으며,
나중에 ALTER TABLE 또는
CREATE INDEX를 사용하여 추가할 수도 있습니다.
큰 데이터 세트의 경우, FULLTEXT 인덱스가 없는 테이블에
데이터를 로드한 다음 그 이후에 인덱스를 생성하는 것이,
이미 FULLTEXT 인덱스가 존재하는 테이블에
데이터를 로드하는 것보다 훨씬 빠릅니다.
전문 검색(full-text searching)은
MATCH() AGAINST() 구문을 사용하여 수행합니다.
MATCH()는 검색할 컬럼 이름을
콤마로 구분한 목록으로 받습니다.
AGAINST는 검색할 문자열과, 수행할 검색 종류를 나타내는
선택적 수식자(modifier)를 받습니다.
검색 문자열은 쿼리 평가 동안 상수인 문자열 값이어야 합니다.
예를 들어, 각 행마다 달라질 수 있는 테이블 컬럼은 사용할 수 없습니다.
MySQL은 롤업 컬럼과 MATCH()를 함께 사용하는 것을 허용하지 않습니다.
좀 더 구체적으로 말하면, 여기 나열된 조건을 모두 만족하는 쿼리는
ER_FULLTEXT_WITH_ROLLUP 에러와 함께 거부됩니다:
MATCH()가 쿼리 블록의
SELECT 리스트, GROUP BY
절, HAVING 절, 또는 ORDER BY 절에 나타나는 경우.
쿼리 블록에 GROUP BY ... WITH ROLLUP 절이 포함되어 있는 경우.
MATCH() 함수 호출의 인자가
그룹화 컬럼 중 하나인 경우.
이러한 쿼리의 예는 다음과 같습니다:
1# MATCH() in SELECT list... 2SELECT MATCH (a) AGAINST ('abc') FROM t GROUP BY a WITH ROLLUP; 3SELECT 1 FROM t GROUP BY a, MATCH (a) AGAINST ('abc') WITH ROLLUP; 4 5# ...in HAVING clause... 6SELECT 1 FROM t GROUP BY a WITH ROLLUP HAVING MATCH (a) AGAINST ('abc'); 7 8# ...and in ORDER BY clause 9SELECT 1 FROM t GROUP BY a WITH ROLLUP ORDER BY MATCH (a) AGAINST ('abc');
WHERE 절에서 롤업 컬럼과 함께 MATCH()를 사용하는 것은 허용됩니다.
전문 검색에는 세 가지 유형이 있습니다:
자연어 검색(natural language search)은 검색 문자열을 자연어(자유 텍스트의 구문)로 해석합니다. 큰따옴표 (") 문자를 제외하면 특별한 연산자는 없습니다. 스톱워드(stopword) 목록이 적용됩니다. 스톱워드 목록에 대한 자세한 내용은 Section 14.9.4, “Full-Text Stopwords”를 참조하십시오.
IN NATURAL LANGUAGE MODE 수식자가 주어지거나
수식자가 주어지지 않으면 전문 검색은 자연어 검색이 됩니다.
자세한 내용은
Section 14.9.1, “Natural Language Full-Text Searches”를 참조하십시오.
불리언 검색(boolean search)은 특별한 쿼리 언어의 규칙을 사용하여 검색 문자열을 해석합니다.
문자열에는 검색할 단어들이 포함됩니다.
또한, 매칭되는 행에서 단어가 반드시 존재해야 하거나 존재하지 않아야 한다는 요구 사항,
또는 일반적인 경우보다 더 높거나 낮게 가중치를 두어야 한다는 요구 사항을 지정하는
연산자를 포함할 수 있습니다.
일부 일반적인 단어(스톱워드)는 검색 인덱스에서 생략되며,
검색 문자열에 존재하더라도 매칭되지 않습니다.
IN BOOLEAN MODE 수식자는 불리언 검색을 지정합니다.
자세한 내용은
Section 14.9.2, “Boolean Full-Text Searches”를 참조하십시오.
쿼리 확장 검색(query expansion search)은 자연어 검색의 변형입니다.
검색 문자열을 사용하여 자연어 검색을 수행합니다.
그런 다음 검색에서 반환된 가장 관련성이 높은 행에서 단어를 추출하여
검색 문자열에 추가하고, 검색을 다시 수행합니다.
쿼리는 두 번째 검색의 행을 반환합니다.
IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION 또는 WITH QUERY EXPANSION 수식자는 쿼리 확장 검색을 지정합니다.
자세한 내용은
Section 14.9.3, “Full-Text Searches with Query Expansion”를 참조하십시오.
FULLTEXT 쿼리 성능에 대한 정보는
Section 10.3.5, “Column Indexes”를 참조하십시오.
InnoDB FULLTEXT 인덱스에 대한 자세한 내용은
Section 17.6.2.4, “InnoDB Full-Text Indexes”를 참조하십시오.
전문 검색에 대한 제약 사항은 Section 14.9.5, “Full-Text Restrictions”에 나와 있습니다.
myisam_ftdump 유틸리티는
MyISAM 전문 인덱스의 내용을 덤프합니다.
이는 전문 쿼리를 디버깅하는 데 도움이 될 수 있습니다.
자세한 내용은
Section 6.6.3, “myisam_ftdump — Display Full-Text Index information”을 참조하십시오.
14.8.3 Character Set and Collation of Function Results
14.9.1 Natural Language Full-Text Searches