Oracle Text Nedir

Share Button

Merhaba,

Bu yazıda Oracle veritabanının az bilinen ama işlevi büyük olan Text özelliğinden bahsedeceğim.

En kaba tanımı ile Oracle Text belli bir formatta olan bütünleşik yazılar içerisinde sorgulama yapmaya yarayan bir araçtır. Oracle Text gelişmiş bir INDEX’leme mekanizması kullanarak plain text (VARCHAR2, CLOB) veya BINARY dosyalar (BLOB) üzerinde arama ve görüntüleme işlevleri sunmaktadır.

Oracle Text en basit haliyle iki amaç için kullanılabilinir;

  • Dokümanlarda veya yazılarda geçen anahtar kelimeleri veya cümleleri sorgulamak
  • Doküman katalogları oluşturmak

Bu yazıda dokümanlarda geçen anahtar kelimeleri veya cümleleri sorgulamak ile ilgili anlatım yapacağım.

Oracle Text kullanmak istediğiniz veritabanı sütunu üzerinde oluşturulan bir INDEX ile işlevini yapmaktadır. Temel olarak kullanım amaçlarına göre 3 çeşit INDEX tipi mevcuttur. Her birinin SQL Query Keyword’u farklıdır. Hangi INDEX’i ne tür durumlarda kullanıldığını anlamak için aşağıdaki link’i veya tabloyu inceleyebilirsiniz;

http://docs.oracle.com/cd/B10501_01/text.920/a96517/cdefault.htm

Type Of Index Description Query Operator
CONTEXT Use this index to build a text retrieval application when your text consists of large coherent documents. You can index documents of different formats such as Microsoft Word, HTML, XML, or plain text.You can customize your index in a variety of ways. CONTAINS
CTXCAT Use this index type to improve mixed query performance. Suitable for querying small text fragments with structured criteria like dates, item names, and prices that are stored across columns. CATSEARCH
CTXRULE Use to build a document classification application. You create this index on a table of queries, where each query has a classification. Single documents (plain text, HTML, or XML) can be classified by using the MATCHES operator. MATCHES

Score Kavramı

Score dokümanlar içerisinde aradığınız anahtar kelimenin ters sıklığını belirten bir puanlama algoritmasının sonucudur. Oracle bu algoritmada Salton formülü yöntemini kullanmıştır.

Skorun yüksek olması için arama yaptığınız anahtar kelime veya cümlenin bir doküman içerisinde yüksek sıklıkla geçiyor olması aynı zamanda tablodaki bütün dokümanlar içerisinde düşük sıklıkla geçiyor olması gerekmektedir.

Daha fazla bilgi için;

 http://docs.oracle.com/cd/A91202_01/901_doc/text.901/a90121/ascore2.htm

http://en.wikipedia.org/wiki/Gerard_Salton

Örnekler

Örnekler için öncelikle birkaç setup adımı yapmamız gerekmektedir.

  1. Örnekte kullanılacak doküman örneklerinin belirlenmesi ve geliştirmenin yapılacağı sistemin çalıştığı makinede erişim olan bir dizine kopyalanması.
  2. Dizinin karşılığına denk gelen DIRECTORY objesinin veritabanında oluşturulması
  3. BLOB bir alan içeren custom bir tablo ve sequence objelerinin oluşturulması
  4. Dosyaları aktaran genel bir pl/sql prosedürü oluşturulması. Bkz: PL/SQL File to Blob Yazısı
  5. Prosedürün doküman sayınız kadar çalıştırılması

1. Dokümanlar belirlenir.

o_text1

2. DIRECTORY objesi oluşturulur.

3. TABLE ve SEQUENCE objeleri oluşturulur.

4. PROCEDURE oluşturulur.

5. Dosyalar tabloya aktarılır.

Kurulum işlemleri tamamlandıktan sonra Oracle Text için tablonun DOKUMAN sütunu üzerine bir adet CONTEXT INDEX oluşturulur.

Tablo istatiskleri toplanır.

Yukarıdaki işlemler yapıldıktan sonra dokümanlar üzerinde sorgulama yapabilirsiniz. Tabloda CONTEXT IDX kullandığımız için SQL sorgunuzun WHERE koşulunda “CONTAINS(alan_adi, <keyword>) > 0” koşulunu çalıştırmanız gerekmektedir. Aşağıdaki bir takım sorgular ve sonuçlarını bulabilirsiniz.

Sonuçlar:

INDEX Tanımı

Oluşturulan CTX Index için bilgileri çekmek için aşağıdaki SQL sorgusunu çalıştırabilirsiniz;

Sonuç:

 

Yukarıdaki sonuçta dikkat edilmesi gereken noktalardan biri stop_word bölümüdür.

stop_word

STOPWORD’ler arama indexlemenin durduğu keywordlerdir. STOPWORD’ler STOPLIST’lerin içinde yer almaktadır. INDEX’ler oluşturulurken herhangi bir parametre ile belirtilmemişse INDEX’in ön değer STOPLIST değeri “DEFAULT_STOPLIST” dir.

Bu listeler ve yasak kelimeler ile ilgili aşağıdaki iki tablodan yararlanabilirsiniz.

Aşağıda yasak kelime listesinde bulunan “you” anahtar kelimesi ile ilgil bir SQL çalıştırıldığında, anahtar kelime dokümanlarda bolca bulunmasına rağmen sonuç alınmamaktadır.

Oracle bize bu yasaklı kelimelere ve listelere müdahale edebilmemiz için ctx_ddl paketini sunmuştur. “you” kelimesini listeden çıkarmak için aşağıdaki script çalıştırılır.

Değişikliğin yansıması için INDEX drop edilir ve tekrar yaratılır.

Sorgu tekrar çalıştırılır ve bu sefer 4 dokümanın da geldiği görülür.

Son olarak tablonuza veri ekleme, çıkarma ve güncelleme yaptıkta ilgili CTX INDEX kendisini diğer INDEX’ler gibi senkronize etmez. Performansı dengede tutmak için bunu aralıklarla sizin yapmanız gerekmektedir. Bunun için aşağıdaki script’i çalıştırınız.