オンライン・オークション・サイトでは、品目の説明、価格、入札終了日などの情報を格納し、参照する必要があるため、CTXCAT索引作成のよい例です。
図3-3は、次のスキーマを使用したAUCTIONという表を示しています。
create table auction( item_id number, title varchar2(100), category_id number, price number, bid_close date);
サブ索引を作成するには、サブ索引を格納する索引セットを作成します。
begin
ctx_ddl.create_index_set('auction_iset');
end;
次に、アプリケーションが入力する可能性がある構造化問合せを特定します。CATSEARCH問合せ演算子では、必須のテキスト句とオプションの構造化句を使用します。
この例では、すべての問合せにテキスト列であるtitle列の句が組み込まれています。
構造化句は、次のカテゴリに分類されるとします。
| 構造化句 | 問合せを満たすサブ索引の定義 | カテゴリ |
|---|---|---|
'price < 200' 'price = 150' 'order by price' |
'price' |
A |
'price = 100 order by bid_close' 'order by price, bid_close' |
'price, bid_close' |
B |
構造化問合せ句カテゴリA
構造化問合せ句には、次のように、価格列のみの式が含まれています。
SELECT FROM auction WHERE CATSEARCH(title, 'camera', 'price < 200')> 0; SELECT FROM auction WHERE CATSEARCH(title, 'camera', 'price = 150')> 0; SELECT FROM auction WHERE CATSEARCH(title, 'camera', 'order by price')> 0;
これらの問合せは、サブ索引Bを使用して満たすことができます。しかし、効率を上げるために、priceのみにサブ索引を作成することもできます。それをここではサブ索引Aとします。
begin
ctx_ddl.add_index('auction_iset','price'); /* sub-index A */
end;
構造化問合せ句カテゴリB
構造化問合せ句には、priceについての等式にbid_closeでのソートの条件が付与されたもの、およびpriceとbid_closeの両方で(この順に)ソートの条件が付与されたものが含まれます。
SELECT FROM auction WHERE CATSEARCH( title, 'camera','price = 100 ORDER BY bid_close')> 0; SELECT FROM auction WHERE CATSEARCH( title, 'camera','order by price, bid_close')> 0;
これらの問合せは、次のように定義したサブ索引で満たすことができます。
begin
ctx_ddl.add_index('auction_iset','price, bid_close'); /* sub-index B */
end;
結合されたBツリー索引と同様に、CTX_DDL.ADD_INDEXを使用して指定する列の順序は、特定の問合せを満たすために使用される索引スキャンの効率性および実行可能性に影響します。たとえば、2つの構造化列pとqにBツリー索引が'p,q'として指定されている場合、Oracle Textでは、この索引をスキャンして'ORDER BY q,p'をソートできません。