개요
예시와 함께 Text index 중 하나인 CTXSYS.CONTEXT의 활용을 안내합니다.
방법
1. Test Table 생성 및 Data Insert
SQL> CREATE TABLE BOOK(ID NUMBER, NAME VARCHAR(4000));
Table 'BOOK' created.
SQL> INSERT INTO BOOK VALUES(1,'The little boat.');
SQL> INSERT INTO BOOK VALUES(2,'The little yellow digger.');
SQL> INSERT INTO BOOK VALUES(3,'The magic pasta pot : an old tale.');
SQL> INSERT INTO BOOK VALUES(4,'The man who was thursday.');
SQL> INSERT INTO BOOK VALUES(5,'The pear in the pear tree.');
SQL> INSERT INTO BOOK VALUES(6,'The rainbow fish.');
SQL> INSERT INTO BOOK VALUES(7,'The story about Ping.');
SQL> COMMIT;
Commit completed.
SQL
복사
2. CTXSYS.CONTEXT Index 생성
SQL> CREATE INDEX CONTEXT_IDX_BOOK ON BOOK(name) INDEXTYPE IS CTXSYS.CONTEXT;
Index 'CONTEXT_IDX_BOOK' created.
SQL
복사
3. TEXT 조회
CONTAINS() 이용해 text를 조회합니다.
SQL> SELECT * FROM BOOK WHERE CONTAINS(name, 'little') > 0 ORDER BY ID;
ID NAME
---------- ----------------------------------------
1 The little boat.
2 The little yellow digger.
2 rows selected.
2 rows selected.
SQL
복사
제약사항 (조회 불가)
•
단어 일부 적용 시
단어 전체를 입력해야 조회 가능합니다.
-- 예: little 조회 시, 일부 스펠링 입력 시 조회 불가
SQL> SELECT * FROM BOOK WHERE CONTAINS(name, 'lit') > 0 ORDER BY ID;
0 row selected.
SQL
복사
•
일반적인 영어 단어
정관사, Be 동사와 같은 일반적인 영어 단어는 조회되지 않습니다.
SQL> SELECT * FROM BOOK WHERE CONTAINS(name, 'The') > 0 ORDER BY ID;
0 row selected.
SQL> SELECT * FROM BOOK WHERE CONTAINS(name, 'was') > 0 ORDER BY ID;
0 row selected.
SQL
복사
•
두글자 단어
in, an 과 같은 두 글자로 이뤄진 단어는 조회되지 않습니다.
SQL> SELECT * FROM BOOK WHERE CONTAINS(name, 'in') > 0 ORDER BY ID;
0 row selected.
SQL> SELECT * FROM BOOK WHERE CONTAINS(name, 'an') > 0 ORDER BY ID;
0 row selected.
SQL
복사
•
신규로 Insert 된 data
-- Data 추가 Insert
SQL> INSERT INTO BOOK VALUES(8,'The little prince.');
1 row inserted.
SQL> COMMIT;
Commit completed.
-- Data 조회
SQL> SELECT * FROM BOOK WHERE CONTAINS(name, 'little') > 0 ORDER BY ID;
ID NAME
---------- ----------------------------------------
1 The little boat.
2 The little yellow digger.
2 rows selected.
-- 신규 Insert 된 Data는 조회 불가
SQL
복사
참고
신규로 Insert된 data도 조회하기 위해서는 CTX_DDL.SYNC_INDEX()를 이용해 Index Sync를 맞춰줍니다.
SQL> EXEC CTX_DDL.SYNC_INDEX('CONTEXT_IDX_BOOK');
PSM completed.
-- 새로 Insert된 data 조회
SQL> SELECT * FROM BOOK WHERE CONTAINS(name, 'little') > 0 ORDER BY ID;
ID NAME
---------- ----------------------------------------
1 The little boat.
2 The little yellow digger.
8 The little prince.
3 rows selected.
SQL
복사