TEXT Indexing Elements
본 장에서는 Tibero TEXT 인덱스와 관련된 Elements에 대해 설명합니다.
Tibero TEXT 인덱스를 생성하는 저장공간, STOPLIST, LEXER 등 각종 설정에 대한 파라미터를 설정할 수 있습니다.
STORAGE
TEXT 인덱스를 생성하는 경우 생성되는 인덱스와 테이블의 저장 공간을 지정한다.
LEXER
TEXT 인덱스를 생성하는 경우 사용되는 LEXER의 설정을 한다.
WORDLIST
TEXT 인덱스를 생성하는 경우 생성되는 토큰에 관련된 설정을 한다.
STOPLIST
TEXT 인덱스에서 제외한 단어를 지정한다.
DATASTORE
TEXT 인덱스를 생성하는 경우 문서 저장 방법을 지정한다.
FILTER
문서를 색인하기 위해 필터링되는 방법을 지정한다.
SECTION GROUP
문서를 여러 섹션으로 나누는 기준을 정의한다.
PREFERENCE를 생성하기 위해서 TEXT_DDL.CREATE_PREFERENCE를 사용합니다.
Tibero TEXT에서는 앞에서 설명한 7가지 PREFERENCE 클래스에 대하여 각각 이미 정의된 PREFERENCE를 제공합니다. 사용자는 정의된 PREFERENCE를 사용하여 새로운 PREFERENCE를 생성하여 사용할 수 있습니다.
PREFERENCE 생성 후 TEXT_DDL.SET_ATTRIBUTE를 사용하여 속성값을 변경할 수 있습니다.
STORAGE
TEXT 인덱스를 생성하는 경우 생성되는 인덱스와 테이블의 저장 공간을 지정합니다. STORAGE 클래스에는 BASIC_STORAGE가 정의되어 있으며 속성은 다음과 같습니다.
I_TABLE_CLAUSE
TEXT 인덱스 토큰이 저장되는 테이블의 테이블 스페이스이다.
I_ROWID_INDEX_CLAUSE
토큰 테이블의 ROWID 컬럼에 대한 인덱스의 테이블 스페이스이다.
I_INDEX_CLAUSE
토큰 테이블의 토큰 컬럼에 대한 인덱스의 테이블 스페이스이다.
K_TABLE_CLAUSE
추후 추가될 기능을 위해 예약된 속성이다.
P_TABLE_CLAUSE
추후 추가될 기능을 위해 예약된 속성이다.
N_TABLE_CLAUSE
추후 추가될 기능을 위해 예약된 속성이다.
R_TABLE_CLAUSE
매핑 테이블의 ROWID 컬럼에 대한 인덱스의 테이블 스페이스이다.
S_TABLE_CLAUSE
추후 추가될 기능을 위해 예약된 속성이다.
LEXER
TEXT 인덱스를 생성하는 경우 사용할 LEXER에 대한 설정을 하기 위한 클래스입니다.
BASIC_LEXER
공백/특수문자로 구분하는 LEXER입니다.
다음은BASIC_LEXER에 적용할 수 있는 속성에 대한 예제입니다.
MIXED_CASE
대소문자 구별하여 인덱싱할지 여부를 결정한다. TRUE인 경우 구별하여 인 덱스한다. (속성값: TRUE/FALSE, 기본값: FALSE)
BASE_LETTER
Umlaut, acute accent와 같은 base letter들을 구분하여 인덱싱할지 여부를검사한다. TRUE인 경우 구분하지 않고 인덱스한다.
(속성값: TRUE/FALSE, 기본값: FALSE)
WHITESPACE
whitespace로 지정한 문자들은 punctuation 및 newline 문자와 결합해 sen tence 및 paragraph의 구분자 역할을 하여 sentence 및 paragraph 검색에 사 용된다. 기본값은 공백 또는 탭 문자이고 사용자가 whitespace를 지정했을경우 기본값 외에도 사용자가 지정한 값으로 whitespace가 인식된다. (속성값: 문자열, 기본값: 공백 또는 탭 문자)
JAPANESE_LEXER
일본어 텍스트에서 토큰을 만들기 위한 LEXER입니다. JAPANESE_LEXER는 일본어 형태학(morphological)분석기입니다.
다음은 JAPANESE_LEXER에 적용할 수 있는 속성에 대한 예제입니다.
ASCII_MIXED_CASE
ASCII 영역의 문자들에 대하여 대소문자 구별하여 인덱싱할지 여부를 결정한다. TRUE인 경우 구별하여 인덱스한다. (속성값: TRUE/FALSE, 기본값: FALSE)
DELIMETER
특수문자(/, -, ·)와 같은 일본어의 delimeter를 구분자로 사용할 것인지 여부 를 결정한다. TRUE인 경우 구분하지 않고 인덱스한다.
(속성값: TRUE/FALSE, 기본값: FALSE)
CHINESE_LEXER
중국어 텍스트에서 토큰을 만들기 위한 LEXER입니다.
CHINESE_LEXER는 다음과 같은 제약을 가집니다.
UTF8, GBK character set에서만 CHINESE_LEXER를 지원합니다.
CTXCAT 인덱스는 사용할 수 없고, CONTEXT 인덱스만 사용 가능합니다.
CHINESE_VGRAM_LEXER
중국어 텍스트에서 토큰을 만들기 위한 LEXER 입니다. CHINESE_LEXER와는 다르게 의미 기반이 아닌 글 자 수 기반으로 토큰을 생성합니다.
CHINESE_VGRAM_LEXER는 다음과 같은 제약을 가집니다.
UTF8 character set에서만 CHINESE_VGRAM_LEXER를 지원합니다.
WORLD_LEXER
여러 언어가 포함된 문서에서 토큰을 만들기 위한 LEXER로, 언어를 자동으로 감지하여 토큰을 만듭니다. 띄어쓰기가 있는 언어는 띄어쓰기 기준으로 토큰을 생성하고, 띄어쓰기가 없는 일본어나 중국어의 경우에는 2-gram으로 토큰을 만듭니다.
WORLD_LEXER는 다음과 같은 제약을 가집니다.
UTF8 character set에서만 WORLD_LEXER를 지원합니다.
2-gram으로 토큰을 생성하는 일본어나 중국어는 와일드카드를 지원하지 않습니다.
CTXCAT 인덱스는 사용할 수 없고, CONTEXT 인덱스만 사용 가능합니다.
WORDLIST
TEXT 인덱스를 생성하는 경우 생성되는 토큰의 설정과 관련된 클래스입니다.
현재 BASIC_WORDLIST가 정의되어 있으며 속성은 다음과 같습니다.
PREFIX_INDEX
YES로 설정하는 경우 단어의 접두어를 별도로 인덱싱하여 접두어 검색 성능을 향상시킨다. (속성값: YES/NO, 기본값: NO)
PREFIX_MIN_LENGTH
PREFIX_INDEX이 YES일 경우 인덱싱하는 접두어의 최소 길이를 지정한다. (범위: 1 ~ 64, 기본값: 1)
PREFIX_MAX_LENGTH
PREFIX_INDEX이 YES일 경우 인덱싱하는 접두어의 최대 길이를 지정한다.(범위: 1 ~ 64, 기본값: 64)
STOPLIST
STOPLIST는 인덱스에서 제외될 단어를 지정합니다. DEFAULT_STOPLIST, EMPTY_STOPLIST가 정의되어있습니다. DEFAULT_STOPLIST에는 기본적인 STOPWORD가 입력되어 있습니다. 자세한 내용은 “Appendix A. STOPWORDS”를 참고합니다. EMPTY_STOPLIST는 STOPWORD가 없는 STOPLIST를 의미합니다.
TEXT_DDL.CREATE_STOPLIST를 사용하여 새로운 STOPLIST를 생성하고, TEXT_DDL.ADD_STOPWORD를 사용하여 STOPWORD를 추가할 수 있습니다.
DATASTORE
DATASTORE는 문서 저장 방법을 지정 할 수 있습니다.
DATASTORE 클래스에는 DIRECT_DATASTORE와MULTI_COLUMN_DATASTORE가 정의되어 있습니다.
DIRECT_DATASTORE
DIRECT_DATASTORE를 사용하면 데이터는 텍스트 컬럼에 내부적으로 저장됩니다. 각 row는 단일 문서로 인덱싱됩니다. DIRECT_DATASTORE 유형에는 속성이 없습니다.
MULTI_COLUMN_DATASTORE
MULTI_COLUMN_DATASTORE는 데이터가 여러 개의 컬럼에 저장되어 있을 때 사용합니다. MULTI_COL UMN_DATASTORE로 지정된 컬럼들은 각 row별로 합쳐져서 인덱싱됩니다.
COLUMNS
인덱싱할 컬럼들을 콤마(,)로 구분하여 지정한다. VARCHAR, CLOB, NUM BER, DATE 타입의 컬럼들만 지정할 수 있으며, 컬럼 이름 외에도 컬럼에 대한 expression 및 PSM 함수를 지정할 수 있다. (속성값: STRING)
DELIMITER
각 컬럼 텍스트를 구분하는 구분자를 지정한다.
COLUMN_NAME_TAG : 각 컬럼의 텍스트는 XML 형식의 시작/마침 태그 로 구분되며, 각 태그는 컬럼 이름을 가진다. (기본값)
NEWLINE : 각 컬럼의 텍스트는 newline으로 구분된다.
FILTER
문서를 색인하기 위해 필터링되는 방법을 결정합니다. FILTER 클래스에는 NULL_FILTER만 정의되어 있습니다.
NULL_FILTER
NULL_FILTER는 필터링을 하지 않고 일반 문서, HTML, XML을 그대로 인덱싱합니다. NULL_FILTER 유형에는 속성이 없습니다.
SECTION GROUP
문서구조를 여러 섹션으로 나누는 기능입니다. 섹션을 정의하지 않는 NULL_SECTION_GROUP만 정의되어 있습니다.TEXT_DDL.CREATE_SECTION_GROUP을 사용하여 새로운 SECTION_GROUP을 생성할 수 있습니다.
TEXT_DDL 패키지
다음은 PREFERENCE를 생성하고 관리하기 위해 TEXT_DDL 패키지에서 제공하는 프러시저입니다.
ADD_SPECIAL_SECTION
SECTION GROUP에 special section인 SENTENCE 또는 PARA GRAPH를 추가하기 위한 프로시저이다.
ADD_STOPWORD
STOPLIST에 STOPWORD를 추가하기 위한 프러시저이다.
CREATE_PREFERENCE
새로운 PREFERENCE를 정의하는 프러시저이다.
CREATE_SECTION_GROUP
새로운 SECTION_GROUP을 정의하는 프러시저이다.
CREATE_STOPLIST
새로운 STOPLIST를 만들기 위한 프러시저이다.
DROP_PREFERENCE
PREFERENCE를 삭제하기 위한 프러시저이다.
DROP_SECTION_GROUP
SECTION_GROUP을 삭제하기 위한 프러시저이다.
DROP_STOPLIST
STOPLIST를 삭제하기 위한 프러시저이다.
EMOVE_SECTION
SECTION GROUP에서 SECTION을 삭제하기 위한 프로시저이다.
REMOVE_STOPWORD
STOPLIST에서 STOPWORD를 삭제하기 위한 프러시저이다.
SET_ATTRIBUTE
REFERENCE의 속성값을 설정하기 위한 프러시저이다.
ADD_SPECIAL_SECTION
SECTION GROUP에 Special Section인 SENTENCE 또는 PARAGRAPH을 추가하기 위한 프로시저입니다. Special Section을 추가함으로써 WITHIN 연산자를 사용한 SENTENCE 및 PARAGRAPH 검색이 가능해집니다.
Special Section을 가진 SECTION GROUP을 지정하여 인덱스를 생성할 때 정해진 구분자를 기준으로 Special Section들을 토큰화합니다.
구분기준
SENTENCE: [단어][punctuation][whitespace] 또는 [단어][punctuation][newline]
PARAGRAPH: [단어][punctuation][newline][whitespace] 또는 [단어][punctuation][new line][newline]
프로토타입
ADD_SPECIAL_SECTION (
group_name IN VARCHAR2,
section_name IN VARCHAR2)
파라미터
group_name
추가할 대상의 SECTION GROUP 이름이다.
section_name
추가할 section 이름으로 'SENTENCE' 또는 'PARAGRAPH'를 지정할 수 있다.
예제
SQL>EXEC TEXT_DDL.ADD_SPECIAL_SECTION('nullgroup','SENTENCE');
ADD_STOPWORD
STOPWORD 타입에 새로운 STOPWORD를 추가하기 위한 프러시저입니다.
프로토타입
ADD_STOPWORD (
stoplist_name IN VARCHAR2,
stopword IN VARCHAR2,
lang IN VARCHAR2 DEFAULT 'ALL')
파라미터
stoplist_name
추가할 대상의 STOPLIST 이름이다.
stopword
추가할 STOPWORD이다.
lang
STOPWORD가 적용될 언어이다. (미지원)
예제
SQL>EXEC TEXT_DDL.ADD_STOPWORD('DEFAULT_STOPLIST','test_word');
CREATE_PREFERENCE
새로운 PREFERENCE를 만들기 위한 프러시저입니다.
프로토타입
CREATE_PREFERENCE (
udef_pref_name IN VARCHAR2,
pdef_pref_name IN VARCHAR2)
파라미터
udef_pref_name
사용자가 정의할 PREFERENCE 이름이다.
pdef_pref_name
Tibero TEXT에서 정의된 PREFERENCE 이름이다.
예제
SQL>EXEC TEXT_DDL.CREATE_PREFERENCE('TEST1','BASIC_WORDLIST');
CREATE_SECTION_GROUP
새로운 SECTION_GROUP을 만들기 위한 프러시저입니다.
프로토타입
CREATE_SECTION_GROUP (
udef_pref_name IN VARCHAR2,
pdef_pref_name IN VARCHAR2)
파라미터
udef_pref_name
사용자가 정의할 PREFERENCE 이름이다.
pdef_pref_name
Tibero TEXT에서 정의된 PREFERENCE 이름이다.
예제
SQL>EXEC TEXT_DDL.CREATE_SECTION_GROUP('my_sg','NULL_SECTION_GROUP');
CREATE_STOPLIST
새로운 STOPLIST을 만들기 위한 프러시저입니다.
프로토타입
CREATE_STOPLIST (
stoplist_name IN VARCHAR2,
stoplist_type IN VARCHAR2 DEFAULT 'DEFAULT_STOPLIST')
파라미터
stoplist_name
생성할 STOPLIST 이름이다.
stoplist_type
생성할 STOPLIST의 타입이다.
현재 DEFAULT_STOPLIST와 EMPTY_STOPLIST가 있다.
예제
SQL>EXEC TEXT_DDL.CREATE_STOPLIST('new_stoplist', 'DEFAULT_STOPLIST');
DROP_PREFERENCE
생성한 PREFERENCE를 삭제하기 위한 프러시저입니다.
프로토타입
DROP_PREFERENCE (udef_pref_name IN VARCHAR2);
파라미터
udef_pref_name
삭제할 PREFERENCE 이름이다.
예제
SQL>EXEC TEXT_DDL.DROP_PREFERENCE('TEST1');
DROP_SECTION_GROUP
생성한 SECTION_GROUP을 삭제하기 위한 프러시저입니다.
프로토타입
DROP_SECTION_GROUP (udef_pref_name IN VARCHAR2);
파라미터
udef_pref_name
삭제할 SECTION_GROUP 이름이다.
예제
SQL>EXEC TEXT_DDL.DROP_PREFERENCE('my_sg');
DROP_STOPLIST
STOPLIST를 삭제하기 위한 프러시저입니다.
프로토타입
DROP_STOPLIST (stoplist_name IN VARCHAR2);
파라미터
stoplist_name
삭제할 STOPLIST 이름이다.
예제
SQL>EXEC TEXT_DDL.DROP_STOPLIST('new_stoplist');
REMOVE_SECTION
SECTION GROUP에서 SECTION을 삭제하기 위한 프로시저입니다.
프로토타입
REMOVE_SECTION (
group_name IN VARCHAR2,
section_name IN VARCHAR2)
파라미터
group_name
삭제할 대상의 SECTION GROUP 이름이다.
section_name
삭제할 SECTION 이름이다.
예제
SQL>EXEC TEXT_DDL.REMOVE_SECTION('nullgroup','test_section');
SQL>EXEC TEXT_DDL.REMOVE_SECTION('nullgroup','SENTENCE');
REMOVE_STOPWORD
STOPLIST에서 STOPWORD를 삭제하기 위한 프러시저입니다.
프로토타입
REMOVE_STOPWORD (
stoplist_name IN VARCHAR2,
stopword IN VARCHAR2,
lang IN VARCHAR2 DEFAULT 'ALL' )
파라미터
stoplist_name
삭제할 대상의 STOPLIST 이름이다.
stopword
삭제할 STOPWORD이다.
lang
STOPWORD가 적용되는 언어이다. (미지원)
예제
SQL>EXEC TEXT_DDL.REMOVE_STOPWORD('DEFAULT_STOPLIST','test_word');
SET_ATTRIBUTE
생성된 PREFERENCE의 속성값을 설정하기 위한 프러시저입니다.
프로토타입
SET_ATTRIBUTE (
udef_pref_name IN VARCHAR2,
attribute_name IN VARCHAR2,
value IN VARCHAR2)
파라미터
udef_pref_name
속성값을 변경할 사용자가 정의한 PREFERENCE이다.
attribute_name
변경할 대상 속성이다.
value
변경할 값이다.
예제
SQL>EXEC TEXT_DDL.SET_ATTRIBUTE('TEST1','PREFIX_INDEX','TRUE');
CTX_DDL 패키지
CONTEXT 인덱스를 관리하기 위한 CTX_DDL 패키지에서 제공하는 프러시저들을 알아봅니다.
OPTIMIZE_INDEX
인덱스를 동기화 한 후 인덱스를 최적화하는 방법입니다. 인덱스를 최적화하면 이전 데이터가 제거되고 최소화되므로 쿼리 응답시간이 향상 될 수 있습니다.
프로토타입
CTX_DDL.OPTIMIZE_INDEX (
idx_name IN VARCHAR2,
optlevel IN VARCHAR2,
maxtime IN NUMBER DEFAULT NULL,
token IN VARCHAR2 DEFAULT NULL,
part_name IN VARCHAR2 DEFAULT NULL,
token_type IN NUMBER DEFAULT NULL,
parallel_degree IN NUMBER DEFAULT 1)
파라미터
idx_name
최적화할 인덱스 이름이다.
optlevel
최적화 방법을 설정한다.
다음과 같이 FAST, FULL 2가지 방법이 있다.
FAST : 중복된 토큰을 합쳐주고, 이전 데이터(삭제된 행)를 제거하지 않는 다.
FULL : 중복된 토큰을 합쳐주고, 이전 데이터(삭제된 행)를 제거한다.
maxtime
최대 최적화 시간을 설정한다. (미지원)
token
최적화할 토큰을 설정한다. (미지원)
part_name
로컬 인덱스의 경우 파티션 이름을 설정한다.
token_type
최적화할 토큰 타입을 설정한다. (미지원)
parallel_degree
최적화할 parallel_degree를 설정한다. (미지원)
예제
begin
ctx_ddl.optimize_index('myindex','FAST');
end
SYNC_INDEX
기본 테이블에 대한 삽입, 업데이트 및 삭제가 있을 때 CONTEXT 인덱스의 자동 동기화를 위해 사용됩니다.
프로토타입
CTX_DDL.SYNC_INDEX (
idx_name IN VARCHAR2 DEFAULT NULL,
memory IN VARCHAR2 DEFAULT NULL,
part_name IN VARCHAR2 DEFAULT NULL,
parallel_degree IN NUMBER DEFAULT 1,
maxtime IN NUMBER DEFAULT NULL,
locking IN NUMBER DEFAULT LOCK_WAIT)
파라미터
idx_name
최적화할 인덱스 이름이다.
memory
동기화에 사용할 런타임 메모리를 설정한다.
1K에서 256G까지의 값을 지정 할 수 있다.
part_name
로컬 인덱스의 경우 파티션 이름을 설정한다.
parallel_degree
최적화할 parallel_degree를 설정한다. (미지원)
maxtime
최대 최적화 시간을 설정한다. (미지원)
locking
SYNC_INDEX가 동일한 인덱스 또는 파티션에서 이미 다른 동기화가 실행되 고 있는 상황을 처리하는 방법을 구성한다. (미지원)
예제
begin
ctx_ddl.sync_index('myindex');
end
CTX_OUTPUT 패키지
CONTEXT 인덱스를 관리하기 위한 CTX_OUTPUT 패키지에서 제공하는 프러시저들을 알아봅니다.
END_LOG
인덱싱 과정의 로깅을 중지합니다.
프로토타입
CTX_OUTPUT.END_LOG;
예제
begin
ctx_output.end_log;
end
START_LOG
인덱싱 과정의 로깅을 시작합니다.
프로토타입
CTX_OUTPUT.START_LOG (
file_name IN VARCHAR2,
write_option IN BOOLEAN DEFAULT TRUE)
파라미터
file_name
로그 파일의 이름을 지정한다.
write_option
이미 로그 파일이 존재하는 경우 파일을 덮어 쓸지 새로운 로그 파일을 추가할지 지정한다. 기본값은 파일을 덮어 쓰는 것이다.
예제
begin
ctx_output.start_log('myindex', true);
end
Last updated