Tanımlayabileceğiniz üç tip karakter vardır:
1-) Printjoin Characters: Alfanümerik olmayan bir karakteri indekslenen karakterlerin listesine eklemek için kullanılır. Örnek vermek gerekirse "web-site" kelimesi normalde "website" şeklinde indekslenir. Tire (-) işaretini printjoin listesine eklerseniz artık "web-site" şeklinde indekslenecektir ve website şeklinde sorgular "web-site" sonucunu vermeyecektir.
2-) Skipjoin Characters : Printjoin'in tersi olarak indeslenmemesini istediğiniz alfanümerik olmayan karakterleri tanımlayabilirsiniz.
3-) Diğer karakterler : Satır sonunda bir kelimeyi ayırmak için kullanılan karakteri (-) tanımlamak için continuation; noktalama işaretlerinin indeslenip indekslenmeyeceğini belirtmek için punctuations ; satır sonu karakterini (\n) belirlemek için newline ; u-ü o-ö gibi noktalı noktasız harfleri beraber olarak aramak istiyorsak base_letter; büyük küçük harf ayrımını belirlemek için mixed_case kullanılabilir.
Aşağıdaki AUCTION tablosunun oluşturulduğunu ve bu tablo üzerinde çalıştığımızı varsayalım.
Aşağıdaki şekilde AUCTION tablosuna Oracle Text Indexsi ekliyoruz:
-- set up the special characters as printjoins if you wish to search for them
EXEC CTX_DDL.CREATE_PREFERENCE ('special_chars_lexer', 'BASIC_LEXER');
EXEC CTX_DDL.SET_ATTRIBUTE ('special_chars_lexer', 'PRINTJOINS', '*=-');
-- create an index set and add a sub-index
EXEC CTX_DDL.CREATE_INDEX_SET('auction_iset');
EXEC CTX_DDL.ADD_INDEX('auction_iset','price');
-- Create the combined catalog index on the AUCTION table
DROP INDEX auction_titlex;
CREATE INDEX auction_titlex ON AUCTION(title)
INDEXTYPE IS CTXSYS.CTXCAT
PARAMETERS ('LEXER special_chars_lexer index set auction_iset');
1-) Aşağıdaki sorgu yanlızca yanında boşluk olan Tire "-" işaretli veriyi yani sadece ve sadece "-" işareti varsa sonuç dönüyor.
>> SELECT title, price FROM AUCTION WHERE CATSEARCH(title, '{\-}') > 0;
5 - STAR (*****) CAMERA , 2500
2-) Tire işaretini "-" içeren tüm verileri bulmak için aşağıdaki sorgulamayı yapmak gerekiyor:
>> SELECT title, price FROM auction WHERE CATSEARCH(title, '{*\-*}',)>0;
5-STAR(*****) CAMERA,2500
5-STAR (*****) CAMERA,2500
5 - STAR (*****) CAMERA,2500
3-) Eşittir işaretini "=" içeren tüm verileri bulmak için de benzer şekilde aşağıdaki sorgulamayı yapmak gerekiyor:
>> SELECT title, price FROM auction WHERE CATSEARCH(title, '{*\=*}',)>0;
EQUAL (=) CAMERA,25
=======================================,100
============== Cash ==================,102
============= Success ================,103
============== Cash ==================4,104
4-) Yıldız işaretini "*" içeren tüm verileri bulmak için ise aşağıdaki sorgu işe yaramıyor. Bu sorgu tüm verileri döndürüyor:
>> SELECT title, price FROM auction WHERE CATSEARCH(title, '{*\**}',)>0;
5-) 1 ve 1'den fazla Yıldız işaretini "*" içeren tüm verileri bulmak için ise aşağıdaki gibi bir sorgu yazmak gerekiyor. Bu farkın nedeni CATSEARCH'ün "*" işaretini wildcard olarak kullanması olabilir.
>> SELECT title, price FROM auction WHERE CATSEARCH(title, '{\*} | {\*\*} | {\*\*\*} | {\*\*\*\*} | {\*\*\*\*\*}',)>0;
* STAR CAMERA,2500
444 ** *** ***** 444,101
5-STAR(*****) CAMERA,2500
5-STAR (*****) CAMERA,2500
5 - STAR (*****) CAMERA,2500
Hiç yorum yok:
Yorum Gönder