2017-01-03 3 views
0

Oracle APEXアプリケーションを介したフルテキスト検索を有効にする必要がある3列の表があります。 3つの列をすべて検索できるように、どのようにしてインデックスを作成できますか?Context Full-Text Searchの同じテーブルの複数の列を索引付けしますか?

は現在、私は1つの列(STOP_NAME)上でコンテキストのインデックスを持っている:

DECLARE 

    l_query VARCHAR2(4000); 

BEGIN 

    l_query:= 
    'select 
    "BUS_STOP_ID", 
    "STOP_NAME", 
    "DESC_NOTES", 
    "BUS_NUMBERS", 
    "LOCATION" 
    from "BUS_STOPS" '; 

    IF v('P2_REPORT_SEARCH') IS NOT NULL THEN 
    l_query := l_query||' '||' 
    where 
    ( 
    CONTAINS(STOP_NAME, ''$'|| v('P2_REPORT_SEARCH') ||''') > 0 
    ) 
    '; 
    END IF; 

    RETURN l_query; 

END; 

しかし、どのように私は、テキスト検索のための3つの列(stop_name、desc_notes、bus_numbers)を使用してインデックスを作成することができますか?私は3列を使用して作成する標準インデックスを使用してみましたが、それはうまくいきませんでした:

BEGIN 
ctx_ddl.create_preference('my_multi_idx', 'MULTI_COLUMN_DATASTORE'); 
ctx_ddl.set_attribute('my_multi_idx', 'COLUMNS', 'stop_name, desc_notes, bus_numbers'); 
END; 

あらかじめ設定された優先順位を使用して、インデックス自体を作成することによって、続い:

CREATE INDEX bus_stops_ctx_idx 
ON bus_stops (stop_name, bus_numbers, desc_notes) 
INDEXTYPE IS ctxsys.context; 
+2

SQLインジェクション警告!これを代わりに試してください: 'CONTAINS(STOP_NAME、 '' $ '' ||:P2_REPORT_SEARCH)> 0' –

答えて

0

最初のステップは、索引付けプリファレンスを作成することでした:

CREATE INDEX bus_stops_ctx_idx 
ON bus_stops(stop_name) 
INDEXTYPE IS CTXSYS.CONTEXT 
PARAMETERS ('DATASTORE my_multi_idx SYNC (ON COMMIT)'); 
関連する問題