ハイブリッド・ベクトル索引のガイドラインおよび制限事項

ハイブリッド・ベクトル索引を操作する場合は、次のガイドラインおよび現在の一連の制限事項を確認してください。

索引作成のガイドライン

ハイブリッド・ベクトル索引は、Oracle Text検索索引とOracle AI Vector Searchベクトル索引の両方を含む単一ドメインの索引です。1つの索引タイプの作成中に障害が発生すると、索引全体の作成が失敗する可能性があります。このため、ベクトル索引およびOracle Text検索索引に個別に適用可能なすべての索引付けガイドラインに従う必要があります。

たとえば、HNSWベクトル索引のベクトル・メモリー・プールが不十分な場合、または表領域が不十分な場合、ベクトル索引関連のエラーが発生すると、ハイブリッド・ベクトル索引の作成に失敗することがあります。

  • Ctrl+Cの実行やデータベースの停止など、破壊的な操作が発生した場合は、索引のステータスを確認する必要があります。索引ステータスがvalidとして表示されない場合、索引が破損しているか一貫性がない可能性があるため、使用することは安全ではありません。このような場合、索引を再作成する必要があります。

  • ハイブリッド・ベクトル索引のDDLにエラーがある場合、またはDDLで障害が発生した場合は、索引を手動で削除し、再度作成する必要があります。索引を使用する前に、索引ステータスをチェックして安全に使用できることを確認します。

索引のステータスを確認するには、CTX_INDEXESCTX_USER_INDEXESなどの通常のOracle Textデータ・ディクショナリ・ビューを問い合せます。『Oracle Textリファレンス』を参照してください。

ハイブリッド・ベクトル索引のメンテナンス操作

Oracle Text索引と同様に、ハイブリッド・ベクトル索引を保守できます。ハイブリッド・ベクトル索引では、同期、最適化、自動メンテナンスなど、Oracle Text索引の従来の操作がほとんどすべてサポートされます。

実表に対するDML操作後の索引のメンテナンスに関するガイドラインを次に示します:

  • デフォルトの索引メンテナンス:

    ハイブリッド・ベクトル索引は自動メンテナンス・モード(MAINTENANCE AUTO)で実行されます。つまり、DMLは最適な間隔でバックグラウンドで索引に自動的に同期されます。

    ハイブリッド・ベクトル索引を維持するために、メンテナンス・タイプまたは同期タイプを手動で構成する必要はありません。ただし、必要に応じて、デフォルト設定を変更して、同期間隔を設定したり、SYNCタイプ(MANUALEVERYON COMMITなど)を指定したり、DBMS_SCHEDULERを使用してバックグラウンドの同期ジョブをスケジュールできます。

    自動メンテナンス・モードでは、索引は、ユーザーによる操作なしで非同期的にメンテナンスされます。通常のOracle Textビューを定期的に調べて、すべてのバックグラウンド・メンテナンス・イベントのステータスを確認することをお薦めします。

    これらのビューの詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。

  • デフォルトの索引最適化:

    ハイブリッド・ベクトル索引は、バックグラウンドの自動完全最適化ジョブを使用して、ローカル時間の午前0時に毎日実行されます。このジョブにより、索引が最適化されてデフラグされ、$I$D$VRなどのセカンダリ表からの遅延削除がクリーン・アップされます。

  • $VRテーブルの最適化

    ハイブリッド・ベクトル索引の場合、$VR表のみを最適化することもできます。この最適化は、新しい「セクション」(セマンティック索引)の「セクション・モード」で実行されます。これは、削除されたROWIDを削除することによってのみ、$VR表を圧縮します。
    CTX_DDL.OPTIMIZE_INDEX([schema.]index_name, ‘token_type’, 
                           ‘ctx_ddl.section_semantic_index’);

    特にハイブリッド・ベクトル索引で実表への多数の挿入、更新または削除が実行される場合、索引の最適化をより頻繁に明示的に実行することをお薦めします。これは、頻繁な索引の同期によって索引の断片化が発生し、問合せ応答時間に悪影響を与える可能性があるためです。CTX_DDL.OPTIMIZE_INDEXを使用して索引を最適化すると、断片化と索引サイズを削減できます。

    最適化の構成方法の詳細は、「CREATE HYBRID VECTOR INDEX」の索引メンテナンス・プリファレンスを参照してください。

$VRに対してSQL問合せを直接実行する場合のガイドライン

索引最適化ジョブが実行される前に$VRなどのセカンダリ表を直接問い合せた場合、古いデータまたは削除された行が引き続き表示されることがあります。これは、Oracle提供の検索API (DBMS_HYBRID_VECTOR.SEARCH)では問合せ時に無視されるためです。たとえば、行IDを削除済としてマークするが、索引の最適化後にのみセカンダリ表から削除される遅延削除が表示される場合があります。

$VR表を直接調査するかわりに、データ・ディクショナリ・ビュー<index name>$VECTORSを使用して$VR表の内容を操作し、それに応じてビューに対して直接SQL問合せを実行できます。このビューでは、すべての遅延削除を(生成された対応するチャンクおよび埋込みとともに)除外して、ドキュメント表の行IDを問い合せることができます。

<index name>$VECTORSビューはユーザーのスキーマに存在することに注意してください。したがって、ハイブリッド・ベクトル索引の名前がIDXの場合、ビュー名はIDX$VECTORSです。

このビューの詳細は、「<index name>$VECTORS」を参照してください。

VPDポリシー保護のガイドライン

Oracle Virtual Private Database (VPD)ポリシーを実表に適用した場合は、次のことを行う必要があります:

  • 同じVPDポリシーでハイブリッド・ベクトル索引全体を保護します($I$VRおよび$Dセカンダリ表を含む)。

  • 同じVPDポリシーで<index name>$VECTORSビュー($VR表に作成)を保護します。

  • すべてのSQL問合せがハイブリッド・ベクトル索引に対して実行され、スキーマ内に作成されたセカンダリ表に対して実行されるすべての直接SQL問合せもそのVPDポリシーに準拠していることを確認します。

VPDを使用して一般的なデータ・アクセスを制御する方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

ハイブリッド・ベクトル索引でのDDLの制限事項

  • サポートされているデータ型は、CLOBVARCHAR2またはBLOBです。IS JSONチェック制約があるテキスト列はサポートされていません。

    JSONなどの他のデータ型は、現在ハイブリッド・ベクトル索引ではサポートされていません。

  • ローカルのハイブリッド・ベクトル索引の作成はサポートされていません。

  • 現在、外部で作成されたチャンクまたはベクトルをハイブリッド・ベクトル索引の$VR表に直接インポートすることはできません。

  • 現在、ハイブリッド・ベクトル索引のベクトル埋込みを生成するために、データベース内のONNX埋込みモデル(サードパーティの埋込みモデルではなく)のみがサポートされています。

  • HAMMINGおよびJACCARD距離メトリックは、現在ハイブリッド・ベクトル索引ではサポートされていません。

  • DML追跡サポートは、ハイブリッド・ベクトル索引のベクトル索引の部分のIVFおよびHNSWベクトル索引の動作と協調しています。

  • VECTOR_CHUNKSUTL_TO_CHUNKSUTL_TO_TEXTおよびUTL_TO_SUMMARYファンクションによって生成された出力に基づくマテリアライズド・ビューの作成は、現在サポートされていません。

ノート:

現在の一連の制限を考慮すると、次のシナリオではハイブリッド・ベクトル索引を作成することをお薦めします:

  • ハイブリッド検索モードでテキスト・ドキュメント(CLOBVARCHAR2またはBLOBデータ型)を検索する場合。

  • テキスト・データの問合せ時に、キーワード検索とセマンティック検索を切り替える場合。

セマンティックにのみ検索されるデータがある場合、または独自のサードパーティ・ベクトル埋込みを手動で作成する場合(DBMS_VECTORおよびDBMS_VECTOR_CHAINサードパーティREST APIを使用して)は、ハイブリッド・ベクトル索引を作成するかわりにベクトル索引を使用します。