はじめに
IBM i(AS/400)をご利用の皆様、長年蓄積してきたマスターデータを、もっと効果的に活用できたらと思ったことはありませんか?
多くの企業では、IBM i上のマスターデータに対してLIKE句による部分一致検索や全文検索を使用していますが、これらの従来手法では「表記揺れ」や「同義語」に対応できず、ユーザーが求める商品を見逃してしまうことがあります。
本記事では、IBM iのデータはそのまま活用しながら、最新のAI技術(AWS Bedrock Cohere)を組み合わせることで、「意味」で検索できるセマンティック検索を実現する方法をご紹介します。
背景と課題
従来のキーワード検索の課題
データベースに蓄積されたマスターデータを検索する際、文字列の部分一致(LIKE句など) による検索が使われることがあります。この方式には、以下のような課題が考えられます:
- 表記揺れへの対応: 「トルク」と「回転力」は同じ概念を指しますが、文字列一致では別物として扱われます
- 同義語や関連語: 「ねじを締める工具」で検索しても、「トルクレンチ」という商品名では見つかりにくい場合があります
- ユーザーの意図: 検索キーワードとデータが完全に一致しない場合、期待する結果が得られないことがあります
セマンティック検索による解決
セマンティック検索(意味ベース検索) は、テキストを数値ベクトルに変換し、ベクトル間の類似度で検索を行う手法です。これにより:
- 意味的に類似した商品を発見: キーワードが含まれていなくても、意味が近い商品を検索できます
- 自然な表現で検索可能: 「ねじを締める工具」のような自然な表現でも適切な結果が得られます
- ユーザー体験の向上: より直感的で柔軟な検索が可能になります
- IBM iのデータ資産を活用: 既存のDB2データベースはそのまま、検索機能だけを強化
システム構成
アーキテクチャ概要
IBM iを中心としたシステム構成を作成します。
技術スタック
| 技術 | 役割 |
|---|---|
| AWS Bedrock Cohere | テキストのベクトル化 |
| PostgreSQL + pgvector | ベクトルデータの保存・検索 |
データフロー
1. データ同期フロー(初回・定期実行)
重要なポイント:
- PostgreSQLには商品コード(CODE)とベクトルのみを保存
- 商品名や説明などの詳細データはIBM iに残す
- これにより、IBM iを単一の真実の情報源(Single Source of Truth)として維持
- データの整合性を保証し、ストレージコストを削減
2. セマンティック検索フロー(ユーザー検索時)
実装のポイント
1. AWS Bedrock Cohereによるベクトル化
AWS Bedrock の Cohere Embed Multilingual v3 モデルを使用しています。
選定理由:
- 多言語対応: 日本語の商品名・説明文に最適化されており、高精度なベクトル化が可能
- 1024次元のベクトル: 意味的な類似性を細かく捉えることができる
- マネージドサービス: インフラ管理不要で、スケーラブルに利用可能
- コスト効率: 従量課金制で、小規模から始めて段階的に拡大可能
ベクトル化の仕組み:
商品名と説明文を組み合わせたテキストを、1024個の数値(ベクトル)に変換します。意味が似ているテキストは、似たようなベクトルになるため、数値計算で「意味の近さ」を測定できます。
2. PostgreSQL + pgvectorによる高速検索
PostgreSQLの拡張機能 pgvector を使用して、ベクトルデータを効率的に保存・検索します。
技術的特徴:
- HNSWインデックス: 数千〜数万件のデータでも10ms以下で検索可能
- コサイン類似度: ベクトル間の「意味の近さ」を0〜1のスコアで算出
- スケーラビリティ: データ量が増えても検索速度を維持
保存するデータ:
- 商品コード(IBM iのキー)
- ベクトルデータ(1024次元の数値配列)
- 作成日時
IBM iのデータは変更しません
PostgreSQLには検索用のベクトルデータのみを保存し、商品の詳細情報(商品名、カテゴリ、説明など)はすべてIBM i上に残します。これにより、IBM iを「マスターデータベース」として維持し、データの整合性を保証します。
3. IBM i (AS/400) との連携
IBM i Access ODBC Driverを使用して、IBM iのDB2データベースに接続します。
接続方法:
- IBM i Access ODBC Driverをインストール(無償)
- ODBC接続文字列を設定
- 標準的なSQL文でデータを取得
データ取得の流れ:
-
同期時:
SELECT * FROM SHNMSTで全商品データを取得 -
検索時:
SELECT * FROM SHNMST WHERE CODE IN (...)で該当商品のみを取得
IBM i Access ODBC Driverについて
IBM i Access ODBC Driverは、IBM i(AS/400)のDB2データベースに外部システムから接続するための標準的な方法です。Windows、Linux、macOSで利用可能で、IBM公式サイトから無償でダウンロードできます。既存のIBM i環境をそのまま活用できるため、システム変更のリスクを最小限に抑えられます。
デモンストレーション
実際にアプリケーションを動かして、キーワード検索とセマンティック検索を比較してみました。
UIの初期画面
主な機能:
- データ同期: AS/400からデータを取得し、Cohereでベクトル化してPostgreSQLに保存
- 検索比較: キーワード検索とセマンティック検索を同時に実行し、結果を並べて表示
検索結果の比較
「テスト」というキーワードで検索した結果を比較してみます。
キーワード検索(左側・オレンジ)
従来のキーワード検索では、商品名に「テスト」という文字列が含まれる商品のみがヒットします。
- 結果件数: 4件
- 検索ロジック: 文字列の部分一致
- 特徴: 確実性は高いが、見逃しが多い
セマンティック検索(右側・紫)
セマンティック検索では、「テスト」という概念に意味的に関連する商品が幅広くヒットします。
- 結果件数: 5件以上
- 検索ロジック: ベクトル類似度
- 特徴: 多様な結果が得られ、ユーザーの意図を汲み取れる
セマンティック検索でヒットする商品の例:
- 電子トルクテスター ZQUEI(関連する測定機器)
- テスト(直接的な一致)
検索例の比較表
| 検索クエリ | キーワード検索 | セマンティック検索 |
|---|---|---|
| 「管理システム」 | 在庫管理システム、顧客管理システム | 在庫管理、CRM、ERP、データベース、業務ソフトウェア |
| 「ねじを締める工具」 | (ヒットなし) | トルクレンチ |
検証結果と考察
セマンティック検索の優位性
- 検索結果の多様性: キーワード検索では見逃していた関連商品を発見できる
- 自然な表現に対応: 「ねじを締める工具」のような自然な表現でも適切な結果が得られる
- ユーザー体験の向上: より直感的で柔軟な検索が可能
まとめ
IBM i (AS/400) の商品マスターに対して、AWS Bedrock Cohere を使用したセマンティック検索を実装し、従来のキーワード検索と比較検証を行いました。
各企業のIBM iには商品マスター、顧客マスター、部品マスター、技術文書など、重要なデータが眠っていることと思います。今回紹介したような方法であれば既存のシステムを変更することなく、長年蓄積したデータ資産の価値を引き出しやすくなるかもしれません。ぜひ参考にしてみてください。

