Oracle teks, sebelumnya dikenal sebagai Intermedia teks dan konteks, teknologi pengindeksan berbasis teks yang memungkinkan Anda untuk meng-indeks secara efisien berbasis teks dan menghasilkan teks dokumen klasifikasi aplikasi. Pada artikel ini saya hanya akan menulis beberapa fitur ini.
- Konteks Indeks
- CTXCAT Indeks
- CTXRULE Indeks
- Indeks Pemeliharaan
Contoh dalam artikel ini memerlukan grant ke package CTX_DDL, sebagai berikut:
GRANT EXECUTE ON CTX_DDL TO <username>;Konteks Indeks
CONTEXTindeks digunakan untuk indeks jumlah besar teks seperti Word, PDF, XML, HTML atau teks dokumen. Dalam contoh ini kita akan menyimpan data dalamBLOBkolom, yang memungkinkan kita untuk menyimpan binari dokumen seperti Word dan PDF serta teks biasa. Pertama kita buat sebuah contoh skema untuk menampung data kita, sebagai berikut :
DROP TABLE my_docs; DROP SEQUENCE my_docs_seq; DROP PROCEDURE load_file_to_my_docs; CREATE TABLE my_docs ( id NUMBER(10) NOT NULL, name VARCHAR2(200) NOT NULL, doc BLOB NOT NULL ) / ALTER TABLE my_docs ADD ( CONSTRAINT my_docs_pk PRIMARY KEY (id) ) / CREATE SEQUENCE my_docs_seq; CREATE OR REPLACE DIRECTORY documents AS 'C:\work';
Kemudian kita load beberapa file, sebagai berikut :
CREATE OR REPLACE PROCEDURE load_file_to_my_docs (p_file_name IN my_docs.name%TYPE) AS
v_bfile BFILE;
v_blob BLOB;
BEGIN
INSERT INTO my_docs (id, name, doc)
VALUES (my_docs_seq.NEXTVAL, p_file_name, empty_blob())
RETURN doc INTO v_blob;
v_bfile := BFILENAME('DOCUMENTS', p_file_name);
Dbms_Lob.Fileopen(v_bfile, Dbms_Lob.File_Readonly);
Dbms_Lob.Loadfromfile(v_blob, v_bfile, Dbms_Lob.Getlength(v_bfile));
Dbms_Lob.Fileclose(v_bfile);
COMMIT;
END;
/
EXEC load_file_to_my_docs('FullTextIndexingUsingOracleText9i.doc');
EXEC load_file_to_my_docs('FullTextIndexingUsingOracleText9i.asp');
EXEC load_file_to_my_docs('XMLOverHTTP9i.asp');
EXEC load_file_to_my_docs('UNIXForDBAs.asp');
EXEC load_file_to_my_docs('emp_ws_access.sql');
EXEC load_file_to_my_docs('emp_ws_test.html');
EXEC load_file_to_my_docs('9ivsSS2000forPerformanceV22.pdf');
Kemudian kita buat sebuah indeks dengan tipe CONTEXT di kolom dokumen dan gabungkan dengan tabel statistik, sebagai berikut :
CREATE INDEX my_docs_doc_idx ON my_docs(doc) INDEXTYPE IS CTXSYS.CONTEXT; EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'MY_DOCS', cascade=>TRUE);
Terakhir kita buat query untuk mencari dokumen dengan isi yang spesifik:
SELECT SCORE(1) score, id, name
FROM my_docs
WHERE CONTAINS(doc, 'SQL Server', 1) > 0
ORDER BY SCORE(1) DESC;
SCORE ID NAME
---------- ---------- ------------------------------------------------
100 127 9ivsSS2000forPerformanceV22.pdf
1 row selected.
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=4 Card=2 Bytes=58)
1 0 SORT (ORDER BY) (Cost=4 Card=2 Bytes=58)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'MY_DOCS' (Cost=2 Card=2 Bytes=58)
3 2 DOMAIN INDEX OF 'MY_DOCS_DOC_IDX' (Cost=0)
SELECT SCORE(1) score, id, name
FROM my_docs
WHERE CONTAINS(doc, 'XML', 1) > 0
ORDER BY SCORE(1) DESC;
SCORE ID NAME
---------- ---------- ------------------------------------------------
74 123 XMLOverHTTP9i.asp
9 125 emp_ws_access.sql
2 rows selected.
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=4 Card=2 Bytes=58)
1 0 SORT (ORDER BY) (Cost=4 Card=2 Bytes=58)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'MY_DOCS' (Cost=2 Card=2 Bytes=58)
3 2 DOMAIN INDEX OF 'MY_DOCS_DOC_IDX' (Cost=0)
Ditulis oleh Gito Wahyudi