사용자 정의 분석기
사용자 정의 분석기는 문자 필터(char_filter), 토크나이저, 토큰 필터(token_filter)를 결합하여 비즈니스 요구 사항에 맞게 텍스트를 검색 가능한 검색어로 분할하는 방식을 정밀하게 정의할 수 있도록 합니다. 기본 제공 분석기의 한계를 보완하며, 검색 관련성과 데이터 분석의 정확도에 직접적인 영향을 줍니다.

활용 시나리오
| 시나리오 | 권장 조합 |
|---|---|
| 여러 언어가 섞인 텍스트 검색 | icu 토크나이저 + icu_normalizer 필터 |
| 전화번호 / 코드 접두사 매칭 | edge_ngram 토크나이저 |
| 복잡한 영어 텍스트 분할(카멜 표기법, 하이픈 등) | standard 토크나이저 + word_delimiter 필터 |
| 자동 완성 / 입력 제안 | edge_ngram 토크나이저 + lowercase 필터 |
| 정확히 일치하는 값 검색(원래 검색어 유지) | keyword 토크나이저 + lowercase / asciifolding 필터 |
핵심 구성 요소
사용자 정의 분석기는 네 종류의 객체로 구성되며, 원본 텍스트에 순서대로 적용됩니다.
Original text ──► [char_filter] ──► [tokenizer] ──► [token_filter] ──► Terms
| 구성 요소 | 용도 | 개수 |
|---|---|---|
char_filter | 토큰화 전에 문자를 전처리(치환, 정규화 등) | 0 ~ N |
tokenizer | 텍스트를 검색어로 분할 | 1 |
token_filter | 생성된 검색어를 처리(소문자 변환, ASCII 폴딩 등) | 0 ~ N |
analyzer | 위 구성 요소를 조합하여 완전한 토큰화 파이프라인 구성 | 1 |
사용자 정의 분석기 생성
1. 문자 필터(char_filter)
CREATE INVERTED INDEX CHAR_FILTER IF NOT EXISTS x_char_filter
PROPERTIES (
"type" = "char_replace"
-- See below for other parameters
);
지원되는 문자 필터 유형:
-
char_replace: 토큰화 전에 지정한 문자를 대상 문자로 치환합니다.char_filter_pattern: 치환할 문자 목록char_filter_replacement: 치환에 사용할 문자(기본값: 공백)
-
icu_normalizer: ICU 정규화를 사용하여 텍스트를 전처리합니다.name: 정규화 형식(기본값nfkc_cf). 선택 가능한 값:nfc,nfkc,nfkc_cf,nfd,nfkdmode: 정규화 모드(기본값compose). 선택 가능한 값:compose,decomposeunicode_set_filter: 정규화할 문자 집합 지정(예:[a-z])
2. 토크나이저
CREATE INVERTED INDEX TOKENIZER IF NOT EXISTS x_tokenizer
PROPERTIES (
"type" = "standard"
);
지원되는 토크나이저 유형:
| 유형 | 설명 | 주요 매개변수 |
|---|---|---|
standard | Unicode 텍스트 분할 규칙을 따르는 표준 토큰화로, 대부분의 언어에 적합 | 없음 |
ngram | N-gram 단위로 분할 | min_gram, max_gram, max_ngram_diff, token_chars |
edge_ngram | 단어의 시작 부분부터 N-gram 생성 | min_gram, max_gram, token_chars |
keyword | 전체 텍스트를 단일 검색어로 출력하며, 주로 token_filter와 함께 사용 | 없음 |
char_group | 지정된 문자를 기준으로 분할 | tokenize_on_chars |
basic | 영어 / 숫자 / 중국어 / Unicode의 간단한 토큰화 | extra_chars |
icu | 여러 언어의 복잡한 문자 체계를 지원하는 ICU 국제화 토큰화 | 없음 |
ik_smart | 완전한 단어를 우선하는 IK 스마트 중국어 토큰화. 4.1.5부터 사용자 정의 분석기에서 사용 가능 | 없음 |
ik_max_word | 서로 겹칠 수 있는 검색어를 더 많이 생성하는 IK 세분화 중국어 토큰화. 4.1.5부터 사용자 정의 분석기에서 사용 가능 | 없음 |
매개변수 설명:
min_gram: 최소 길이(기본값 1)max_gram: 최대 길이(기본값 2)token_chars: 유지할 문자 범주(기본값: 모두 유지). 선택 가능한 값:letter,digit,whitespace,punctuation,symboltokenize_on_chars: 문자 목록 또는 범주. 지원되는 범주:whitespace,letter,digit,punctuation,symbol,cjkextra_chars: 분할 기준으로 사용할 추가 ASCII 문자(예:[]().)
Ngram 범위 제한(4.1.5부터)
4.1.5부터 ngram 토크나이저는 max_ngram_diff를 지원하여, 최대 gram 길이와 최소 gram 길이의 차이를 1로 제한하던 기존 제약을 완화할 수 있습니다. ngram 토크나이저에 mode 속성을 지정하지 않은 일반적인 경우, 생성 시 다음 조건을 검증합니다.
| 매개변수 | 기본값 | 제약 조건 |
|---|---|---|
min_gram | 1 | max_gram 이하의 양의 정수이며, 최댓값은 1024입니다(새 ngram 토크나이저 기준). |
max_gram | 2 | min_gram 이상의 양의 정수이며, 최댓값은 1024입니다(새 ngram 토크나이저 기준). |
max_ngram_diff | 1 | 0부터 255까지의 정수이며, max_gram - min_gram <= max_ngram_diff를 만족해야 합니다. 값이 0이면 고정 길이 N-gram만 허용됩니다. |
예를 들어 min_gram=1과 max_gram=8을 사용하려면 max_ngram_diff가 7 이상이어야 합니다. 이를 생략하면 The difference between max_gram and min_gram in NGram Tokenizer must be less than or equal to: [ 1 ] but was [7] 오류와 함께 생성이 실패합니다. 전체 사용 방법은 예제 5를 참조하세요.
이러한 제한과 max_ngram_diff는 일반적인 ngram 토크나이저 중 mode 속성을 지정하지 않은 경우에 적용됩니다. mode를 지정한 토크나이저는 별도의 검증을 사용하며 이러한 제한을 무시합니다. edge_ngram은 이 매개변수를 허용하지 않습니다. 전화번호 및 자동 완성 예제에서는 각각의 min_gram 및 max_gram 설정을 그대로 사용합니다. 범위를 넓히면 입력 위치마다 더 많은 검색어가 생성됩니다. 인덱스가 불필요하게 커지지 않도록 검색 요구 사항에 맞게 범위를 설정하세요.
3. 토큰 필터
CREATE INVERTED INDEX TOKEN_FILTER IF NOT EXISTS x_token_filter
PROPERTIES (
"type" = "word_delimiter"
);
지원되는 토큰 필터 유형:
| 유형 | 용도 |
|---|---|
word_delimiter | 영숫자가 아닌 문자를 기준으로 분할하며, 정규화도 수행 가능 |
ascii_folding | 비ASCII 문자를 해당하는 ASCII 문자로 매핑 |
lowercase | 토큰 텍스트를 소문자로 변환 |
icu_normalizer | ICU 정규화를 사용하여 토큰 처리 |
word_delimiter 세부 사항
기본 동작:
- 영숫자가 아닌 문자를 구분자로 사용합니다(예:
Super-Duper를Super,Duper로 분할). - 토큰의 앞뒤에 있는 구분자를 제거합니다(예:
XL---42+'Autocoder'를XL,42,Autocoder로 분할). - 대소문자가 바뀌는 지점에서 분할합니다(예:
PowerShot을Power,Shot으로 분할). - 문자와 숫자의 경계에서 분할합니다(예:
XL500을XL,500으로 분할). - 영어 소유격
's를 제거합니다(예:Neil's를Neil로 변환).
선택적 매개변수:
| 매개변수 | 기본값 | 설명 |
|---|---|---|
generate_number_parts | true | 숫자 부분의 출력 여부 |
generate_word_parts | true | 단어 부분의 출력 여부 |
protected_words | 없음 | 분할하지 않을 보호 단어 |
split_on_case_change | true | 대소문자가 바뀌는 지점에서 분할할지 여부 |
split_on_numerics | true | 문자와 숫자의 경계에서 분할할지 여부 |
stem_english_possessive | true | 영어 소유격 's를 제거할지 여부 |
type_table | 없음 | 사용자 정의 문자 유형 매핑 테이블 |
type_table은 다음 매핑 유형을 지원합니다.
ALPHA(문자)ALPHANUM(영숫자)DIGIT(숫자)LOWER(소문자)SUBWORD_DELIM(영숫자가 아닌 구분자)UPPER(대문자)
예: ["+ => ALPHA", "- => ALPHA"]는 +와 -를 문자로 취급하여 분할 지점으로 사용하지 않도록 합니다.
icu_normalizer 매개변수
name: 정규화 형식(기본값nfkc_cf). 선택 가능한 값:nfc,nfkc,nfkc_cf,nfd,nfkdunicode_set_filter: 정규화할 문자 집합 지정
4. 분석기
위 구성 요소를 조합하여 완전한 토큰화 파이프라인을 구성합니다.
CREATE INVERTED INDEX ANALYZER IF NOT EXISTS x_analyzer
PROPERTIES (
"tokenizer" = "x_tokenizer", -- A single tokenizer
"token_filter" = "x_filter1, x_filter2" -- One or more token_filters, executed in order
);
테이블에서 사용자 정의 분석기 사용
analyzer 필드를 인덱스의 PROPERTIES에 지정하여 생성한 사용자 정의 분석기를 참조합니다.
CREATE TABLE tbl (
`a` bigint NOT NULL AUTO_INCREMENT(1),
`ch` text NULL,
INDEX idx_ch (`ch`) USING INVERTED PROPERTIES("analyzer" = "x_custom_analyzer", "support_phrase" = "true")
)
table_properties;
참고 사항:
- 사용자 정의 분석기는 인덱스의
PROPERTIES에서analyzer로 설정합니다. analyzer와 함께 사용할 수 있는 속성은support_phrase뿐입니다.
단일 컬럼에 여러 분석기 인덱스 생성
Doris는 동일한 컬럼에 서로 다른 토크나이저를 사용하는 여러 역색인을 생성할 수 있습니다. 이를 통해 동일한 데이터를 서로 다른 토큰화 전략으로 검색할 수 있습니다.
사용 사례
- 다국어 지원: 동일한 텍스트 컬럼에 언어별 토크나이저를 사용합니다.
- 검색 정밀도와 재현율의 균형: 정확히 일치하는 값 검색에는 keyword 토크나이저를, 유사 검색에는 standard 토크나이저를 사용합니다.
- 자동 완성: 접두사 매칭에는 edge_ngram 토크나이저를, 일반 검색에는 standard 토크나이저를 사용합니다.
여러 인덱스 생성
-- 1. Create tokenizers with different tokenization strategies
CREATE INVERTED INDEX ANALYZER IF NOT EXISTS std_analyzer
PROPERTIES ("tokenizer" = "standard", "token_filter" = "lowercase");
CREATE INVERTED INDEX ANALYZER IF NOT EXISTS kw_analyzer
PROPERTIES ("tokenizer" = "keyword", "token_filter" = "lowercase");
CREATE INVERTED INDEX TOKENIZER IF NOT EXISTS edge_ngram_tokenizer
PROPERTIES (
"type" = "edge_ngram",
"min_gram" = "1",
"max_gram" = "20",
"token_chars" = "letter"
);
CREATE INVERTED INDEX ANALYZER IF NOT EXISTS ngram_analyzer
PROPERTIES ("tokenizer" = "edge_ngram_tokenizer", "token_filter" = "lowercase");
-- 2. Create multiple indexes on the same column
CREATE TABLE articles (
id INT,
content TEXT,
-- Standard tokenizer for tokenized search
INDEX idx_content_std (content) USING INVERTED
PROPERTIES("analyzer" = "std_analyzer", "support_phrase" = "true"),
-- Keyword tokenizer for exact matching
INDEX idx_content_kw (content) USING INVERTED
PROPERTIES("analyzer" = "kw_analyzer"),
-- edge n-gram tokenizer for auto-completion
INDEX idx_content_ngram (content) USING INVERTED
PROPERTIES("analyzer" = "ngram_analyzer")
) ENGINE=OLAP
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_allocation" = "tag.location.default: 1");
쿼리 시 분석기 지정
USING ANALYZER 절을 사용하여 사용할 인덱스를 지정합니다.
-- Insert test data
INSERT INTO articles VALUES
(1, 'hello world'),
(2, 'hello'),
(3, 'world'),
(4, 'hello world test');
-- Tokenized search: matches rows containing the term 'hello'
-- Returns: 1, 2, 4
SELECT id FROM articles WHERE content MATCH 'hello' USING ANALYZER std_analyzer ORDER BY id;
-- Exact match: matches only the exact 'hello' string
-- Returns: 2
SELECT id FROM articles WHERE content MATCH 'hello' USING ANALYZER kw_analyzer ORDER BY id;
-- Use edge n-gram for prefix matching
-- Returns: 1, 2, 4 (all rows starting with 'hel')
SELECT id FROM articles WHERE content MATCH 'hel' USING ANALYZER ngram_analyzer ORDER BY id;
기본 제공 토크나이저를 직접 사용할 수도 있습니다.
SELECT * FROM articles WHERE content MATCH 'hello' USING ANALYZER standard;
SELECT * FROM articles WHERE content MATCH 'hello' USING ANALYZER none;
SELECT * FROM articles WHERE content MATCH 'Hello' USING ANALYZER chinese;
기존 테이블에 인덱스 추가
-- Add a new index that uses a different tokenizer
ALTER TABLE articles ADD INDEX idx_content_chinese (content)
USING INVERTED PROPERTIES("parser" = "chinese");
-- Wait for the schema change to complete
SHOW ALTER TABLE COLUMN WHERE TableName='articles';
인덱스 빌드
인덱스를 추가한 후에는 기존 데이터에 대한 인덱스를 빌드해야 합니다.
-- Build a specific index (non-cloud mode)
BUILD INDEX idx_content_chinese ON articles;
-- Build all indexes (cloud mode)
BUILD INDEX ON articles;
-- Check the build progress
SHOW BUILD INDEX WHERE TableName='articles';
주요 참고 사항
- 토크나이저 동일성: 두 토크나이저의
tokenizer및token_filter구성이 같으면 동일한 토크나이저로 간주합니다. 동일한 컬럼에 동일한 토크나이저 구성을 공유하는 여러 인덱스를 생성할 수 없습니다. - 인덱스 선택 동작:
USING ANALYZER를 지정하면 해당 토크나이저의 인덱스가 존재하고 빌드가 완료된 경우 그 인덱스를 사용합니다.- 인덱스가 빌드되지 않았다면 쿼리는 인덱스를 사용하지 않는 실행 경로로 전환됩니다(결과는 정확하지만 성능은 느려집니다).
USING ANALYZER를 지정하지 않으면 사용 가능한 인덱스 중 하나가 사용될 수 있습니다.
- 성능 고려 사항:
- 인덱스를 추가할 때마다 저장 공간과 쓰기 오버헤드가 증가합니다.
- 실제 쿼리 패턴에 맞게 토크나이저를 선택하세요.
- 쿼리 패턴을 예측할 수 있다면 인덱스 수를 줄이는 방안을 고려하세요.
관리 및 유지보수
조회
SHOW INVERTED INDEX TOKENIZER;
SHOW INVERTED INDEX TOKEN_FILTER;
SHOW INVERTED INDEX ANALYZER;
삭제
DROP INVERTED INDEX TOKENIZER IF EXISTS x_tokenizer;
DROP INVERTED INDEX TOKEN_FILTER IF EXISTS x_token_filter;
DROP INVERTED INDEX ANALYZER IF EXISTS x_analyzer;
전체 예제
예제 1: 전화번호 접두사 매칭
edge_ngram을 사용하여 전화번호의 모든 접두사 조각을 생성하면 입력 중에도 검색할 수 있습니다.
CREATE INVERTED INDEX TOKENIZER IF NOT EXISTS edge_ngram_phone_number_tokenizer
PROPERTIES
(
"type" = "edge_ngram",
"min_gram" = "3",
"max_gram" = "10",
"token_chars" = "digit"
);
CREATE INVERTED INDEX ANALYZER IF NOT EXISTS edge_ngram_phone_number
PROPERTIES
(
"tokenizer" = "edge_ngram_phone_number_tokenizer"
);
CREATE TABLE tbl (
`a` bigint NOT NULL AUTO_INCREMENT(1),
`ch` text NULL,
INDEX idx_ch (`ch`) USING INVERTED PROPERTIES("support_phrase" = "true", "analyzer" = "edge_ngram_phone_number")
) ENGINE=OLAP
DUPLICATE KEY(`a`)
DISTRIBUTED BY RANDOM BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);
SELECT tokenize('13891972631', '"analyzer"="edge_ngram_phone_number"');
결과:
[
{"token":"138"},
{"token":"1389"},
{"token":"13891"},
{"token":"138919"},
{"token":"1389197"},
{"token":"13891972"},
{"token":"138919726"},
{"token":"1389197263"}
]
예제 2: 복잡한 영어 텍스트의 세분화 토큰화
standard 토크나이저와 word_delimiter를 함께 사용하면 텍스트를 더 세밀하게 토큰화하고 대소문자 정규화와 ASCII 폴딩도 적용할 수 있습니다.
CREATE INVERTED INDEX TOKEN_FILTER IF NOT EXISTS word_splitter
PROPERTIES
(
"type" = "word_delimiter",
"split_on_numerics" = "false",
"split_on_case_change" = "false"
);
CREATE INVERTED INDEX ANALYZER IF NOT EXISTS lowercase_delimited
PROPERTIES
(
"tokenizer" = "standard",
"token_filter" = "asciifolding, word_splitter, lowercase"
);
CREATE TABLE tbl (
`a` bigint NOT NULL AUTO_INCREMENT(1),
`ch` text NULL,
INDEX idx_ch (`ch`) USING INVERTED PROPERTIES("support_phrase" = "true", "analyzer" = "lowercase_delimited")
) ENGINE=OLAP
DUPLICATE KEY(`a`)
DISTRIBUTED BY RANDOM BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);
SELECT tokenize('The server at IP 192.168.1.15 sent a confirmation to user_123@example.com, requiring a quickResponse before the deadline.', '"analyzer"="lowercase_delimited"');
결과:
[
{"token":"the"},
{"token":"server"},
{"token":"at"},
{"token":"ip"},
{"token":"192"},
{"token":"168"},
{"token":"1"},
{"token":"15"},
{"token":"sent"},
{"token":"a"},
{"token":"confirmation"},
{"token":"to"},
{"token":"user"},
{"token":"123"},
{"token":"example"},
{"token":"com"},
{"token":"requiring"},
{"token":"a"},
{"token":"quickresponse"},
{"token":"before"},
{"token":"the"},
{"token":"deadline"}
]
예제 3: 원래 검색어를 유지하여 정확히 일치하는 값 검색
keyword 토크나이저로 전체 텍스트를 그대로 유지한 다음, lowercase와 asciifolding을 적용하여 정규화합니다. 이 방식은 대소문자를 구분하지 않고 정확히 일치하는 문자열을 검색할 때 주로 사용합니다.
CREATE INVERTED INDEX ANALYZER IF NOT EXISTS keyword_lowercase
PROPERTIES
(
"tokenizer" = "keyword",
"token_filter" = "asciifolding, lowercase"
);
CREATE TABLE tbl (
`a` bigint NOT NULL AUTO_INCREMENT(1),
`ch` text NULL,
INDEX idx_ch (`ch`) USING INVERTED PROPERTIES("support_phrase" = "true", "analyzer" = "keyword_lowercase")
) ENGINE=OLAP
DUPLICATE KEY(`a`)
DISTRIBUTED BY RANDOM BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);
SELECT tokenize('hÉllo World', '"analyzer"="keyword_lowercase"');
결과:
[
{"token":"hello world"}
]
예제 4: IK 스마트 및 세분화 중국어 토큰화(4.1.5부터)
4.1.5부터 사용자 정의 분석기는 기본 제공 ik_smart 및 ik_max_word 토크나이저를 직접 참조할 수 있습니다. 또는 둘 중 하나를 type으로 지정한 이름 있는 토크나이저를 사용하여 문자 필터 및 토큰 필터와 결합할 수 있습니다. 두 IK 토크나이저 모두 추가 토크나이저 매개변수는 없습니다. 두 토크나이저는 ik 디렉터리의 사전을 사용하며, 이 디렉터리는 BE 구성 inverted_index_dict_path로 지정한 경로 아래에 있습니다. 토큰화와 인덱스 생성에 참여하는 모든 BE는 이러한 구성 요소를 지원하고 사전을 읽을 수 있어야 합니다.
아래 예제에서는 직접 참조하는 방법과 이름 있는 토크나이저를 사용하는 방법을 보여 줍니다. 이러한 구성 요소를 생성하려면 전역 ADMIN 권한이 필요합니다. 테이블 생성, 데이터 적재, 쿼리에도 대상 데이터베이스와 테이블에 대한 해당 권한이 필요합니다.
CREATE INVERTED INDEX ANALYZER IF NOT EXISTS cn_ik_smart
PROPERTIES ("tokenizer" = "ik_smart");
CREATE INVERTED INDEX TOKENIZER IF NOT EXISTS cn_ik_max_tokenizer
PROPERTIES ("type" = "ik_max_word");
CREATE INVERTED INDEX ANALYZER IF NOT EXISTS cn_ik_max
PROPERTIES ("tokenizer" = "cn_ik_max_tokenizer");
생성에 성공하면 Query OK가 반환됩니다. 구성 요소가 BE에 동기화된 후 TOKENIZE로 출력을 비교하세요. 다음 결과는 기본 제공 사전을 사용한 결과이며, 사전을 변경하면 토큰이 달라질 수 있습니다.
SELECT TOKENIZE('中华人民共和国', '"analyzer"="cn_ik_smart"');
[{"token":"中华人民共和国"}]
SELECT TOKENIZE('中华人民共和国', '"analyzer"="cn_ik_max"');
[
{"token":"中华人民共和国"},
{"token":"中华人民"},
{"token":"中华"},
{"token":"华人"},
{"token":"人民共和国"},
{"token":"人民"},
{"token":"共和国"},
{"token":"共和"},
{"token":"国"}
]
테이블의 역색인에서 분석기를 사용합니다.
CREATE TABLE ik_articles (
id INT,
content STRING,
INDEX idx_content(content) USING INVERTED
PROPERTIES("analyzer" = "cn_ik_smart")
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_allocation" = "tag.location.default: 1");
INSERT INTO ik_articles VALUES (1, '中华人民共和国');
SELECT id FROM ik_articles
WHERE content MATCH '中华人民共和国' USING ANALYZER cn_ik_smart
ORDER BY id;
+----+
| id |
+----+
| 1 |
+----+
ik_smart는 검색 시 완전한 중국어 단어를 유지해야 할 때 사용하고, ik_max_word는 더 많은 하위 단어 매칭이 필요할 때 사용하세요. 추가 토큰 처리가 필요하면 분석기의 token_filter 속성으로 토큰 필터를 추가하세요.
예제 5: Ngram 길이 범위 확장(4.1.5부터)
다음 토크나이저는 길이가 1부터 8까지인 N-gram을 생성하며, 이를 위해 max_ngram_diff=7을 명시적으로 설정합니다.
CREATE INVERTED INDEX TOKENIZER IF NOT EXISTS ngram_1_8_tokenizer
PROPERTIES (
"type" = "ngram",
"min_gram" = "1",
"max_gram" = "8",
"max_ngram_diff" = "7"
);
CREATE INVERTED INDEX ANALYZER IF NOT EXISTS ngram_1_8_analyzer
PROPERTIES ("tokenizer" = "ngram_1_8_tokenizer");
생성에 성공하고 BE에 동기화된 후 다음을 실행하세요.
SELECT TOKENIZE('abcdefgh', '"analyzer"="ngram_1_8_analyzer"');
[
{"token":"a"}, {"token":"ab"}, {"token":"abc"}, {"token":"abcd"},
{"token":"abcde"}, {"token":"abcdef"}, {"token":"abcdefg"}, {"token":"abcdefgh"},
{"token":"b"}, {"token":"bc"}, {"token":"bcd"}, {"token":"bcde"},
{"token":"bcdef"}, {"token":"bcdefg"}, {"token":"bcdefgh"},
{"token":"c"}, {"token":"cd"}, {"token":"cde"}, {"token":"cdef"},
{"token":"cdefg"}, {"token":"cdefgh"},
{"token":"d"}, {"token":"de"}, {"token":"def"}, {"token":"defg"}, {"token":"defgh"},
{"token":"e"}, {"token":"ef"}, {"token":"efg"}, {"token":"efgh"},
{"token":"f"}, {"token":"fg"}, {"token":"fgh"},
{"token":"g"}, {"token":"gh"}, {"token":"h"}
]
제한 사항
type과 매개변수를tokenizer및token_filter에 지정할 때는 현재 지원되는 토크나이저와 토큰 필터만 사용할 수 있습니다. 그렇지 않으면 테이블 생성이 실패합니다.analyzer는 사용하는 테이블이 없을 때만 삭제할 수 있습니다.tokenizer또는token_filter는 사용하는analyzer가 없을 때만 삭제할 수 있습니다.- 사용자 정의 분석기 DDL은 실행 후 10초가 지나면 BE에 동기화되며, 이후 데이터 적재 시 오류가 발생하지 않습니다.
참고 사항
- 사용자 정의
analyzer에 여러 구성 요소를 중첩하면 토큰화 성능이 저하될 수 있습니다. select tokenize토큰화 함수는 사용자 정의 분석기를 지원하며, 토큰화 결과를 디버깅하는 데 사용할 수 있습니다.- 사전 정의된
built_in_analyzer와 사용자 정의analyzer중 하나만 동일한 인덱스에 존재할 수 있습니다.