Loading...
MySQL 9.5 Reference Manual 9.5의 14.9.7 Adding a User-Defined Collation for Full-Text Indexing의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
경고
User-defined collation은 deprecated되었습니다. 향후 버전의 MySQL에서 이들에 대한 지원이 제거될 것으로 예상해야 합니다. Server는 SQL 구문에서 COLLATE user_defined_collation을 사용할 때마다 warning을 발생시킵니다. 또한 server를 --collation-server 옵션을 user-defined collation 이름으로 설정하여 시작할 때도 warning이 발생합니다.
이 섹션에서는 내장 full-text 파서를 사용하여 full-text 검색을 위한 user-defined collation을 추가하는 방법을 설명합니다. 예시 collation은 latin1_swedish_ci와 유사하지만, '-' 문자를 구두점 문자가 아니라 문자로 취급하여 단어 문자로 인덱스될 수 있게 합니다.
Collation 추가에 대한 일반적인 정보는 Section 12.14, “Adding a Collation to a Character Set”에 나와 있으며, 이 문서를 이미 읽었고 관련 파일에 익숙하다고 가정합니다.
Full-text 인덱싱을 위한 collation을 추가하려면 다음 절차를 사용합니다. 여기의 지침은 simple 문자 집합에 대한 collation을 추가합니다. 이는 Section 12.14, “Adding a Collation to a Character Set”에서 논의된 것처럼 문자 집합 속성을 설명하는 구성 파일을 사용하여 생성할 수 있습니다.
Unicode와 같은 complex 문자 집합의 경우, 문자 집합 속성을 설명하는 C 소스 파일을 사용하여 collation을 생성합니다.
Index.xml 파일에 collation을 추가합니다.1<charset name="latin1"> 2... 3<collation name="latin1_fulltext_ci" id="1025"/> 4</charset>
latin1.xml 파일에서 collation에 대한 정렬 순서를 선언합니다. 이 경우, 순서는 latin1_swedish_ci에서 복사할 수 있습니다:1<collation name="latin1_fulltext_ci"> 2<map> 300 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 410 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 520 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 630 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 740 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 850 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 960 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 1050 51 52 53 54 55 56 57 58 59 5A 7B 7C 7D 7E 7F 1180 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 1290 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F 13A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF 14B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF 1541 41 41 41 5C 5B 5C 43 45 45 45 45 49 49 49 49 1644 4E 4F 4F 4F 4F 5D D7 D8 55 55 55 59 59 DE DF 1741 41 41 41 5C 5B 5C 43 45 45 45 45 49 49 49 49 1844 4E 4F 4F 4F 4F 5D F7 D8 55 55 55 59 59 DE FF 19</map> 20</collation>
latin1.xml에서 ctype 배열을 수정합니다. 0x2D(이는 '-' 문자의 코드)에 해당하는 값을 10(구두점)에서 01(대문자)로 변경합니다. 아래 배열에서 이는 네 번째 줄의 끝에서 세 번째 값입니다.1<ctype> 2<map> 300 420 20 20 20 20 20 20 20 20 28 28 28 28 28 20 20 520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 648 10 10 10 10 10 10 10 10 10 10 10 10 01 10 10 784 84 84 84 84 84 84 84 84 84 10 10 10 10 10 10 810 81 81 81 81 81 81 01 01 01 01 01 01 01 01 01 901 01 01 01 01 01 01 01 01 01 01 10 10 10 10 10 1010 82 82 82 82 82 82 02 02 02 02 02 02 02 02 02 1102 02 02 02 02 02 02 02 02 02 02 10 10 10 10 20 1210 00 10 02 10 10 10 10 10 10 01 10 01 00 01 00 1300 10 10 10 10 10 10 10 10 10 02 10 02 00 02 01 1448 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1510 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1601 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 1701 01 01 01 01 01 01 10 01 01 01 01 01 01 01 02 1802 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 1902 02 02 02 02 02 02 10 02 02 02 02 02 02 02 02 20</map> 21</ctype>
Server를 재시작합니다.
새로운 collation을 사용하려면, 이를 사용할 컬럼 정의에 포함시킵니다:
1mysql> DROP TABLE IF EXISTS t1; 2Query OK, 0 rows affected (0.13 sec) 3 4mysql> CREATE TABLE t1 ( 5 a TEXT CHARACTER SET latin1 COLLATE latin1_fulltext_ci, 6 FULLTEXT INDEX(a) 7 ) ENGINE=InnoDB; 8Query OK, 0 rows affected (0.47 sec)
1mysql> INSERT INTO t1 VALUEs ('----'),('....'),('abcd'); 2Query OK, 3 rows affected (0.22 sec) 3Records: 3 Duplicates: 0 Warnings: 0 4 5mysql> SELECT * FROM t1 WHERE MATCH a AGAINST ('----' IN BOOLEAN MODE); 6+------+ 7| a | 8+------+ 9| ---- | 10+------+ 111 row in set (0.00 sec)
14.9.6 Fine-Tuning MySQL Full-Text Search
14.9.8 ngram Full-Text Parser