DBMS_SEARCH APIを使用したハイブリッド・ベクトル索引の作成
DBMS_SEARCHパッケージは、複数のソースが検索に使用される場合にハイブリッド・ベクトル索引の作成、管理および問合せを行うためのプロシージャおよびファンクションを提供します。ソースには、DBMS_SEARCHドキュメントで説明されている表およびビューが含まれます。
CREATE_INDEXプロシージャは、ハイブリッド・ベクトル索引の作成に使用できます。
DBMS_SEARCH.CREATE_INDEX(
index_name VARCHAR2,
tablespace VARCHAR2 DEFAULT NULL,
datatype VARCHAR2 DEFAULT NULL,
lexer VARCHAR2 DEFAULT NULL,
stoplist VARCHAR2 DEFAULT NULL,
wordlist VARCHAR2 DEFAULT NULL,
vectorizer VARCHAR2 DEFAULT NULL
);構文には、テキスト検索とベクトル検索の両方のプリファレンスを定義できるパラメータが含まれています。パラメータlexer、stoplistおよびwordlistを使用して、ハイブリッド・ベクトル索引のテキスト・プリファレンスを指定できます。また、パラメータvectorizerを使用して、ハイブリッド検索のベクトル・プリファレンスを指定できます。vectorizerパラメータを使用する場合は、最初にDBMS_VECTOR_CHAIN.CREATE_PREFERENCE PL/SQLファンクションを使用してベクトル化・プリファレンスを作成する必要があります。詳細は、CREATE_PREFERENCEを参照してください。ベクトル化プリファレンスを作成した後、vectorizerパラメータを使用してプリファレンス名を渡すことができます。lexer、stoplistおよびwordlistは、CREATE_PREFERENCEおよびCREATE_STOPLISTファンクションを使用して定義できます。
例:
exec CTX_DDL.CREATE_PREFERENCE('my_lexer','BASIC_LEXER');
exec CTX_DDL.CREATE_STOPLIST('my_stoplist','BASIC_STOPLIST');
exec CTX_DDL.CREATE_PREFERENCE('my_wordlist','BASIC_WORDLIST');
begin
DBMS_VECTOR_CHAIN.CREATE_PREFERENCE(
PREF_NAME => 'my_vectorizer_spec',
PREF_TYPE => DBMS_VECTOR_CHAIN.VECTORIZER,
PARAMS => json(
'{"vector_idxtype" : "ivf",
"model" : "ALL_MINILM_L12",
"by" : "words",
"max" : "100",
"overlap" : "10",
"split" : "recursively",
"language" : "english"
}'));
end;
/
begin
DBMS_SEARCH.CREATE_INDEX(
index_name => 'my_hybrid_idx',
datatype => 'JSON',
lexer => 'my_lexer',
stoplist => 'my_stoplist',
wordlist => 'my_wordlist',
vectorizer => 'my_vectorizer_spec');
end;
/
DBMS_SEARCHパッケージには、異なるスキーマからDBMS_SEARCH索引に1つ以上のデータ・ソース(表、ビューまたは二面性ビュー)を追加できるプロシージャADD_SOURCEも含まれています。
DBMS_SEARCH.ADD_SOURCE (
index_name VARCHAR2,
source_name VARCHAR2,
memory VARCHAR2 DEFAULT NULL,
parallel_degree NUMBER DEFAULT NULL);exec DBMS_SEARCH.ADD_SOURCE('my_hybrid_idx','MYVIEW');my_hybrid_idx)に2つのソースを追加できる例を次に示します:exec DBMS_SEARCH.ADD_SOURCE('my_hybrid_idx','MYVIEW1');
exec DBMS_SEARCH.ADD_SOURCE('my_hybrid_idx','MYVIEW2');ctx_user_index_partitionsビューを問い合せて、ソースが索引に追加され、問合せの準備ができているかどうかを確認できます。この問合せでは、
select ixp_index_partition_name, ixp_status from ctx_user_index_partitions
where IXP_INDEX_NAME = 'my_hybrid_idx' and IXP_PARTITION_NAME LIKE ‘DSR$’;
ソースのステータスが「INDEXED」と表示され、索引付けされ、問合せの準備ができていることが示されます。出力例を次に示します:IXP_INDEX_PARTITION_NAME IXP_STATUS
-------------------------------------------------------------------
DSR$1 INDEXED
DSR$2 INDEXED
rebuildを実行することをお薦めします。この例ではIVF索引を使用しているため、すべてのソースが索引付けされたら次のコマンドを実行します:alter index DR$ARTICLES_IDX$VI rebuild online;
DBMS_SEARCHパッケージに含まれるプロシージャを使用すると、データ・ソースとそのすべての関連データを索引から削除することや、索引とそのすべての関連データをデータベースから削除すること、指定されたソース・メタデータの仮想索引付きJSONドキュメントを返すこと、ヒットリストを取得すること、指定されたフィルタ条件に基づいてJSONドキュメントを集約することも可能になります。プロシージャ、構文、使用方法、制限などの詳細は、DBMS_SEARCHパッケージを参照してください。
親トピック: ハイブリッド・ベクトル索引の管理