【26ai新機能】Oracle AI Vector Search とは?仕組みと実装をわかりやすく解説

オラクルデータベースの基本

Oracle Database 26ai (旧 23ai) の最大の目玉機能と言えば、「AI Vector Search(ベクトル検索)」 です。 これまで「専門的なAIの知識がないと難しい」「専用のベクトルデータベースが必要」と思われていたこの技術が、使い慣れた Oracle Database と SQL だけで実現できるようになりました。

この記事では、AI Vector Search の概念を身近な例で解説し、実際に SQL を使って実装する手順をステップ・バイ・ステップで紹介します。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

1. 「ベクトル検索」を身近な例で理解する

従来のデータベース検索(キーワード検索)と、ベクトル検索は何が違うのでしょうか? 「図書館での本探し」「ネットショッピング」 を例に考えてみましょう。

従来の検索(キーワード検索)

  • ユーザー: 「『美味しい』『パスタ』のレシピ本」と検索機に入力。
  • システム: 本のタイトルや説明文に「美味しい」と「パスタ」という文字が完全に含まれているものだけを表示します。
  • 弱点: 「絶品スパゲッティ」という本は、「パスタ」という文字が含まれていないためヒットしません。

AI Vector Search(ベクトル検索・意味検索)

  • ユーザー:週末に作りたい、おしゃれなイタリアン」と司書さん(AI)に相談。
  • システム(司書): 質問の意味(ニュアンス)を理解し、文字が一致していなくても、そのイメージに近い本を探します。
  • 結果: 「本格ボロネーゼの極意」「プロが教えるパスタとワイン」などがヒットします。

「ベクトル」とは?

この「意味」をコンピュータが理解できるように数値の列(座標)に変換したものが「ベクトル」です。 例えば、あらゆる言葉を「甘さ」「辛さ」「熱さ」のような無数のパラメータで数値化し、地図上の点として配置します。

  • 「カレー」と「シチュー」は地図上で近い場所にある。
  • 「カレー」と「アイスクリーム」は遠い場所にある。

ベクトル検索とは、この「地図上の距離の近さ」を計算してデータを探す技術なのです。

2. Oracle AI Vector Search の実装手順

それでは、実際に Oracle Database 26ai 環境でベクトル検索を行ってみましょう。 ここでは、「映画のレビュー検索」 を例に実装します。

前提条件

  • Oracle Database 26ai (または 23ai) 環境があること
  • 管理者権限(SYSなど)でログインできること

Step 0: 準備(PDBへの接続とユーザー作成)

Oracle Database 26ai はマルチテナント・アーキテクチャ(CDB/PDB)が必須です。 通常のテーブル作成やデータ操作は、PDB(プラガブル・データベース) 内のユーザーで行います。

ここでは、デフォルトで作成される FREEPDB1 に作業用ユーザーを作成し、接続する手順を解説します。

1. 管理者でPDBへ切り替え

まず、データベース・サーバー上のターミナルで sqlplus / as sysdba でログインし、PDBへ移動します。

-- 現在のコンテナを確認(最初は CDB$ROOT にいるはずです)
SHOW CON_NAME;

-- PDB (FREEPDB1) へ切り替え
ALTER SESSION SET CONTAINER = FREEPDB1;

-- 切り替わったか確認
SHOW CON_NAME;
-- 結果: FREEPDB1 と表示されればOK

2. 作業用ユーザーの作成

PDB内にローカルユーザーを作成し、必要な権限を付与します。 23ai/26ai から導入された便利なロール DB_DEVELOPER_ROLE を使うと、開発に必要な権限を一括で付与できます。

-- ユーザー作成 (ユーザー名: vector_user / パスワード: password)
CREATE USER vector_user IDENTIFIED BY password;

-- 開発者用ロールと表領域の権限付与
GRANT DB_DEVELOPER_ROLE TO vector_user;
GRANT UNLIMITED TABLESPACE TO vector_user;

3. リモート接続(簡易接続)の確認

作成したユーザーで接続できるか確認します。 リモートのクライアント(A5:SQL Mk-2, SQL Developer, VS Codeなど)から接続する場合の情報は以下の通りです。 lsnrctl status コマンドで確認できるサービス名 freepdb1 を指定します。

  • ホスト名: サーバーのIPアドレス または ホスト名(例: 26ai-single
  • ポート: 1521
  • サービス名: freepdb1
  • ユーザー: vector_user
  • パスワード: password

SQL*Plus での接続例:

-- 書式: sqlplus ユーザー/パスワード@ホスト:ポート/サービス名
sqlplus vector_user/password@localhost:1521/freepdb1

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

Step 1: ベクトル型を持つテーブルの作成

ここからは、作成した vector_user で実行します。 従来の VARCHAR2NUMBER に加え、新しく VECTOR 型が使えるようになりました。

-- 映画情報テーブルの作成
CREATE TABLE movies (
    movie_id    NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    title       VARCHAR2(100),
    genre       VARCHAR2(50),
    description VARCHAR2(1000),
    -- VECTOR型: ここでは簡易的に3次元のベクトルとして定義
    -- 本来は数百〜数千次元になります
    movie_vector VECTOR(3, FLOAT32)
);

💡 構文の解説:VECTOR型

  • VECTOR(次元数, データ型): カラム定義で使用する新しいデータ型です。
    • 3 (次元数): ベクトルの長さ(数値の個数)を指定します。
      • 例では簡略化して 3 ですが、実際のAIモデル(OpenAIの text-embedding-3-small など)では 15361024 といった大きな数値を指定します。
    • FLOAT32 (データ型): 各数値の精度を指定します。
      • FLOAT32: 標準的な単精度浮動小数点(デフォルト)。
      • FLOAT64: 高精度な倍精度。
      • INT8: データサイズを圧縮したい場合に使用(量子化)。

Step 2: データの登録(ベクトルデータの挿入)

本来は、OpenAI などの埋め込みモデル(Embedding Model)を使ってテキストをベクトル変換しますが、ここでは仕組みを理解するためにダミーの数値データを直接挿入します。

  • アクション映画(激しい・爆発・戦い) → [0.9, 0.1, 0.1] のような傾向
  • 恋愛映画(感動・静か・愛) → [0.1, 0.9, 0.2] のような傾向
  • SF映画(未来・宇宙・科学) → [0.1, 0.1, 0.9] のような傾向

と仮定してデータを入れます。

INSERT INTO movies (title, genre, description, movie_vector) VALUES 
('爆走チェイス2026', 'Action', '激しいカーチェイスと爆発の連続', '[0.95, 0.05, 0.05]');

INSERT INTO movies (title, genre, description, movie_vector) VALUES 
('星空の約束', 'Romance', '田舎町で出会った二人の静かな愛の物語', '[0.05, 0.95, 0.1]');

INSERT INTO movies (title, genre, description, movie_vector) VALUES 
('ギャラクシー・ウォー', 'Sci-Fi', '宇宙艦隊とエイリアンの壮絶な戦い', '[0.6, 0.1, 0.8]'); -- アクション要素とSF要素を持つ

COMMIT;

💡 構文の解説:ベクトルデータの表記

  • '[0.95, 0.05, 0.05]': SQLでベクトルデータを扱う際は、数値をカンマ区切りにし、大括弧 [] で囲んだ文字列として表現します。Oracleが自動的に VECTOR 型へ変換して格納します。

Step 3: ベクトル検索の実行(類似性検索)

ここがハイライトです。 ユーザーが「スカッとする激しい映画が見たい」と検索したとします。 この検索クエリをベクトル化すると [0.9, 0.1, 0.0] (アクション要素強め)になったと仮定します。

このベクトルに近い映画を探すには、VECTOR_DISTANCE 関数を使います。

-- 「スカッとする激しい映画([0.9, 0.1, 0.0])」に近い順に検索
SELECT 
    title,
    genre,
    description,
    -- 検索ベクトルとの距離を計算(数値が小さいほど似ている)
    VECTOR_DISTANCE(movie_vector, '[0.9, 0.1, 0.0]', COSINE) AS distance
FROM 
    movies
ORDER BY 
    distance ASC
FETCH FIRST 3 ROWS ONLY;

💡 構文の解説:VECTOR_DISTANCE関数

  • VECTOR_DISTANCE(対象列, 検索ベクトル, 距離メトリック): 2つのベクトル間の「距離」を計算する関数です。
    • 第1引数: テーブル内のベクトル列(ここでは movie_vector)。
    • 第2引数: 比較したい検索クエリのベクトル。
    • 第3引数: 距離の計算方法(メトリック)。
      • COSINE (コサイン類似度): ベクトルの「方向」の近さを測ります。文章や意味の検索には最も一般的に使われます。
      • EUCLIDEAN (ユークリッド距離): 2点間の直線距離を測ります。物理的な位置関係などに適しています。
      • DOT (内積): ベクトルの大きさと方向の両方を考慮します。
  • ORDER BY distance ASC: 距離が「近い」ものほど似ているため、昇順(小さい順) で並べ替えるのが基本です。

実行結果のイメージ:

TITLEGENREDESCRIPTIONDISTANCE
爆走チェイス2026Action激しいカーチェイス…0.002
ギャラクシー・ウォーSci-Fi宇宙艦隊とエイリアン…0.150
星空の約束Romance田舎町で出会った…0.850

「Action」映画が最も上位に来て、次にアクション要素を含む「Sci-Fi」が続き、全く傾向の異なる「Romance」は距離が遠くなる(類似度が低い)ことがわかります。これがベクトル検索です。

3. なぜ Oracle Database でやるのか?

専用のベクトルデータベース(Pinecone, Milvusなど)も存在しますが、Oracle Database で行うメリットは以下の通りです。

  1. データの一元管理: 顧客データや在庫データ(リレーショナルデータ)と同じ場所にベクトルデータを置けるため、データ移動の手間やセキュリティリスクがありません。
  2. ハイブリッド検索が可能:アクション映画(ベクトル検索)」かつ「2020年以降に公開されたもの(リレーショナル検索)」のような、従来のSQL条件との組み合わせが非常に高速かつ簡単に記述できます。SELECT title FROM movies WHERE release_year >= 2020 -- 既存のSQL条件 ORDER BY VECTOR_DISTANCE(movie_vector, :query_vector, COSINE); -- ベクトル検索
  3. 既存スキルの活用: 新しい言語やAPIを覚える必要なく、いつもの SQL だけで最先端の AI 検索機能を実装できます。

4. まとめ

Oracle AI Vector Search は、データベースに「意味」を理解させる画期的な機能です。

  • 直感的な検索: キーワードが一致しなくても、ユーザーの意図に近いデータを探せる。
  • SQLで完結: 複雑なAIプログラミングなしで実装可能。
  • RAGへの応用: 生成AI(ChatGPTなど)に社内データを与えるための検索基盤として最適。

まずは Oracle Database 26ai Free 版などを利用して、VECTOR 型と VECTOR_DISTANCE 関数を実際に触ってみることをお勧めします。

[参考]
Oracle AI Vector Search | Oracle 日本

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました