"This is not about miles, every mountain has its own beauty to climb"

Oracle Text Query

– Dasarnya adalah ekspresi query.

– Oracle mengembalikan semua documen (index sebelumnya) dengan relevan score dalam setiap dokumen. Score dapat dipakai untuk mengurutkan dokumen-dokumen sebagai kumpulan hasil.

Melakukan Query dengan operator CONTAINS

Operator contains dapat digunakan jika type index yang dibuat adalah Context. Dengan operator contains, kita dapat menggunakan sebuah operator untuk mendefinisikan kriteria pencarian kita. Operator ini mengijinkan pencarian logical, proximity, fuzzy, stemming, thesaurus, dan wildcard.

Contoh sql contains :

Score operator mengembalikan nilai setiap hitlist dan score dapat diurutkan dari score tertinggi dari dokumen ke score terendah.

SELECT SCORE(1), title from news

WHERE CONTAINS(text, ‘oracle’, 1) > 0

ORDER BY SCORE(1) DESC;

Jika ingin menambah kriteria filtering dapat ditambahkan dalam klausa where.

Contoh PL/SQL contains :

Kita dapat menggunakan cursor untuk fetch hasil dari query. PL/SQL ini adalah digunakan untuk mencari semua artikel dari tabel NEWS yang mengandung kata “oracle” dan ditampilkan judul news dan 10 score tertinggi.

declare

rowno number := 0;

begin

for c1 in (SELECT SCORE(1) score, title FROM news

WHERE CONTAINS(text, ‘oracle’, 1) > 0

ORDER BY SCORE(1) DESC)

loop

rowno := rowno + 1;

dbms_output.put_line(c1.title||’: ‘||c1.score);

exit when rowno = 10;

end loop;

end;

Melakukan Query dengan operator CATSEARCH

Operator Catsearch digunakan jika type index yang dibuat adalah CTXCAT. Index type CTXCAT pilihan yang sangat baik jika aplikasi kita menyimpan short text fragment dalam kolom text dan berasosiasi dengan informasi lain dalam kolom yang berhubungan.

Misalnya, aplikasi pelayanan online mempunyai tabel yang menyimpan deksripsi item dalam kolom text dan berasosiasi informasi seperti tanggal dan harga pada kolom lain. Kita dapat membuat index b-tree dalam satu atau lebih dalam kolom ini dengan menggunakan CTXCAT. Hasil dari catsearch adalah mencari index CTXCAT.

Operator yang tersedia untuk query CATSEARCH adalah limited sampai operasi logical seperti AND dan OR. Operator yang dapat dipakai untuk kriteria terstruktur adalah lebih dari, kurang dari, sama dengan, BETWEEN, dan IN.

Ciri dari operator catsearch adalah terdapat klausa struktur. Kolom dalam structured expression harus memiliki korespondensi sub-index.

Contoh sql CATSEARCH :

SELECT FROM auction WHERE CATSEARCH(title, ‘camera’, ‘category_id=99 order by

bid_close desc’)> 0;

category_id dan bid_close mempunyai sub-index dalam index ctxcat untuk tabel auction.

CATSEARCH pada PL/SQL dapat menggunakan cursor sama dengan operator contains.

Melakukan Query dengan operator MATCHES

Operator Matches digunakan jika index yang dibuat bertype CTXRULE. Index CTXRULE adalah index dalam kumpulan dari query yang mendefinisikan klasifikasi kita.

Misalnya, jika kita memiliki input dokumen dalam bentuk stream dan membutuhkan untuk dirouted berdasarkan isi, kita dapat membuat kumpulan query yang mendefinisikan kategori kita. Kita membuat query seperti baris dalam kolom text.

Contoh sql MATCHES :

Query matches mencari semua baris dalam query tabel yang cocok dari sebuah dokumen yang diberikan. Asumsikan querytable memiliki index CTXRULE.

SELECT classification FROM querytable WHERE MATCHES(text, ‘Smith is a common name in the United States’) > 0;

Contoh PL/SQL MATCHES :

PROMPT Populate the category table based on newsfeed articles

PROMPT

set serveroutput on;

declare

mypk number;

mytitle varchar2(1000);

myarticles clob;

mycategory varchar2(100);

cursor doccur is select pk,title,articles from newsfeed;

cursor mycur is select category from profiles where matches(rule, myarticles)>0;

cursor rescur is select category, pk, title from results order by category,pk;

begin

dbms_output.enable(1000000);

open doccur;

loop

fetch doccur into mypk, mytitle, myarticles;

exit when doccur%notfound;

open mycur;

loop

fetch mycur into mycategory;

exit when mycur%notfound;

insert into results values(mycategory, mypk, mytitle);

end loop;

close mycur;

commit;

end loop;

close doccur;

commit;

end;

Case-Sensitive Searching

Oracle Text melayani case insensitive untuk word dan ABOUT query.

WORD QUERY

Word query adalah case sensitive secara default. Kita dapat mengaktifkan pencarian yang case sensitive dengan mengaktifkan attribut mixed_case pada BASIC_LEXER index preference.

Stopwords dan Case-Sensitivity

Jika case-sensitivity diaktifkan untuk word query dan query dalam phrase tersebut mengandung stopwords dan non-stopwords, kita harus menspesifikan case yang benar untuk stopwords. Contoh phrase dari “This boy talks to that girl”, kita asumsikan this adalah stopword.

ABOUT QUERY

About query memberikan hasil yang terbaik ketika query diformulasikan dengan case yang tepat karena normalisasi dari query kita berdasarkan pengetahuan catalog yang case-sensitive. Contohnya turkey didefinisikan sebagai burung sedang Turkey adalah negara.

3 responses

  1. rankga

    Soal tipe-tipe index, aku masih blom baca details

    8 May 2008 at 8:48 am

  2. Permisi, mau bertanya.

    Saya baru main di oracle. Selama ini main Sqlserver. Dan saya juga tentunya baru berkenalan dengan cursor yang setahu saya tidak dikenal SQLServer.

    Begini, rencananya saya ingin mengambil data, sebutlah field no_aplikasi. No aplikasi itu akan digunakan sebagai filter untuk mengambil sebuah data sebuah table. Syntaxnya seperti berikut:

    select * from sms.z_p4_subscriber
    where record_status = 0 and no_aplikasi in
    (select no_aplikasi from z_p4_log_app_tmp);

    Nah, saya berencana, subquery yang ada di dalam kurung tersebut diganti dengan cursor.

    syntax yang sudah saya buat:

    noaplikasi z_p4_subscriber.no_aplikasi%type;
    cursor c1 is select no_aplikasi from z_p4_log_app_tmp;

    begin
    open c1;
    fetch c1 into noaplikasi;
    insert into z_p4_subscriber_tmp select * from sms.z_p4_subscriber where record_status = 0 and no_aplikasi in (noaplikasi);
    end;

    Tapi yang saya dapat dengan cara tersebut cuma 1 baris. Saya baru sadar, kalau fetch itu cuma menarik satu data. bagaimana caranya agar sebuah variable cursor bisa menggantikan subquery?

    Terima kasih.

    12 August 2009 at 5:17 pm

    • rankga

      coba cari aja banyak kok referensi untuk mempelajari cursor di oracle….tujuan cursor hanya mengindex data yang jumlahnya banyak/nggak cuma satu aja

      12 August 2009 at 10:36 pm

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s