TiDB User Day 2025 | 10月3日(金) 10:00〜17:00 開催!登録する
full-text-search-banner

※このブログは2025年5月22日に公開された英語ブログ 「Introducing Full-Text Search for TiDB: Enhancing RAG Applications with Hybrid Search」 の拙訳です。

PingCAPでは、TiDBをオールインワンのAIデータベースとし、どのようなワークロードにもシームレスに対応可能とし、急速に進化するAIエコシステムの需要を満たすよう努めています。TiDBでは既にベクトル検索が利用可能ですが、この度、TiDB Cloud Serverlessクラスタで全文検索 (ベータ版) の対応を発表できることを嬉しく思います。

全文検索は、テキストデータ内の特定のキーワードを検索できる機能です。AIのユースケースにおいては、ベクトル検索と全文検索を組み合わせた「ハイブリッド検索」により、より関連性の高いコンテンツを取得できるようになります。
これにより、RAG (Retrieval-Augmented Generation) アプリケーションにおいて、より良いレスポンスを得ることが可能になります。

本ブログでは、RAGアプリケーションにおける検索の品質を全文検索がどのように向上させるのか、そしてTiDBで全文検索を今すぐ利用する方法について詳しくご紹介します。

Hybridizing Vector Search and Full-Text Search in RAG
RAGにおけるベクトル検索と全文検索のハイブリッド化

主な利点

  • 多言語対応:TiDBは、言語を指定しなくても高精度にさまざまな言語のテキスト検索が可能です (BM25スコアリングを使用)。対応言語には、英語、日本語、中国語、韓国語などが含まれます。さらに、異なる言語のコンテンツを同じテーブル内に格納することも可能です。これは、生成AI向けSaaSサービスにとって特に有用です。なぜなら、ユーザーが任意の言語でコンテンツを保存したいというニーズがあるためです。
  • すべてをひとつのデータベースで:TiDBは、構造化データと非構造化データの両方を1つのデータベースで扱えます。また、SQLPython、その他お好みのプログラミング言語を通じて、豊富なクエリインターフェースを提供します。たとえばGraphRAGアプリケーションを例に取ると、ソースドキュメント、グラフ、テキストチャンク、埋め込みベクトルなどをすべてTiDB上にホスト可能です。さらに、TiDBでSQLを使えば「与えられたクエリと意味的に最も近いナレッジグラフのパスを見つけ、その2次ノードと対応するテキストチャンクを返す」といった高度なクロスクエリ機能も実現できます。
  • 運用負荷とコストの削減:生成AI アプリは、オンラインのトラフィックやユーザーの利用状況によって使用量に波があるのが一般的です。TiDBはその点も考慮しており、TiDB Cloud Serverlessはフルマネージドで、従量課金モデルを採用しています。そのため、ユーザーが利用していない時間帯にはコストを抑えることができ、結果として全体の運用コストを削減できます。

全文検索+ベクトル検索でAIのレスポンスを向上させる方法とは?

ハイブリッド検索 (全文検索とベクトル検索を組み合わせたアプローチ) がなぜ有効なのかを理解するために、まずベクトル検索と全文検索の違いを見てみましょう。

ベクトル検索とは

ベクトル検索は、単語やフレーズの意味を表現するためにベクトル埋込みを使用します。意味的な関係を捉え、文脈に基づいた類似コンテンツを見つけることができます。

たとえば、「Python」という単語はプログラミング言語を指すこともあれば、ヘビを指すこともあります。クエリが 「Python is essential for developers (Pythonは開発者にとって不可欠)」のようなものであれば、TiDBのベクトル検索は 「Python」をプログラミング言語として解釈し、たとえその文中に「Python」という単語が明示されていなくても、より関連性の高い結果を返すことができます。

Vector Search Example
ベクトル検索の実装例

全文検索とは

全文検索は、キーワードの一致に基づいて動作します。テキスト内の単語と完全に一致する語句を検索するため、非常に正確な情報を探すのに適しています。たとえば、”deepseek-r1” のような特定のIDや、”iPhone 15” のような製品名、数字、メールアドレスなどを検索する場合に有効です。こうした正確な情報に対しては、ベクトル検索では関連する結果を返せないことがあるため、全文検索が効果を発揮します。

Full-Text Search Example
フルテキスト検索の例

RAGは、ユーザーのクエリに基づいて大規模なコーパスから関連するドキュメントを取得します。そして、大規模言語モデル (LLM) を用いてそれらの文書に基づいた応答を生成します。この検索プロセスは、生成される応答の品質にとって非常に重要です。

ユーザーのクエリは性質がさまざまで、より意味的なものもあれば、キーワードベースのクエリもあります。そのため、ベクトル検索と全文検索を組み合わせたハイブリッド検索を用いることで、RAGアプリケーションは両者の強みを活かし、検索の質を高めることができます。その結果、より正確で文脈に関連した回答が得られるのです。

Hybrid Search RAG Workflow with Full-Text Search
ハイブリッド検索RAGワークフロー

Python で始めてみましょう

このチュートリアルでは、pytidb Python SDKを使用して、TiDB Cloud Serverlessクラスタ上で全文検索を行う方法を紹介します。このSDKは、ベクトル検索、全文検索、ハイブリッド検索を簡単に扱えるAPIを提供しており、TiDB上でAIアプリケーションを構築するのに非常に便利です。

eu-central-1 リージョンに TiDB Cloud Serverlessクラスタを作成します。

全文検索は、限定されたリージョンのTiDB Cloud Serverless Clusterで利用できます。お持ちでない場合は、以下の手順でTiDB Cloud Serverlessクラスタを無料で作成してください:

  1. TiDB Cloudアカウントをお持ちでない場合は、こちらをクリックしてアカウントを作成してください。
  2. TiDB Cloudアカウントにログインします。
  3. Clustersページで Create Cluster (クラスタの作成) をクリックします。
  4. Create Clusterページでは、デフォルトでServerless が選択されています。このとき、AWS – Frankfurt (eu-central-1) region または AWS – Singapore (ap-southeast-1) を選択してください。現在、全文検索は一部のリージョンでのみ提供されています。
  5. Create をクリックして、TiDB Cloud Serverlessクラスタを作成します。
Create a TiDB Cloud Serverless cluster
TiDB Cloud Serverless クラスタの作成方法
  1. 約30秒でTiDB Cloud Serverlessクラスタが作成されます。

pytidb SDKインストールします。

pip install 'pytidb[models]'

# If you only need basic capabilities:
# pip install pytidb

TiDB Cloud Serverlessへの接続rless

from pytidb import TiDBClient

db = TiDBClient.connect(
    host="gateway01.eu-central-1.prod.aws.tidbcloud.com",
    port=4000,
    username="xxxxxxxxxxxxx.root",
    password="xxxxxxx",
    database="test",
)

クラスタへの接続パラメータは、TiDB Cloud consoleから取得できます。

  1. Clusters pageページに移動し、対象のクラスタ名をクリックしてその概要ページに進みます。
  2. 画面右上の「Connect」をクリックすると、接続ダイアログが表示され、接続パラメータが一覧で表示されます。
  3. クラスタに初めて接続する場合は、[Generate Password]をクリックして新しいランダムなパスワードを生成します。生成されたパスワードは再度表示されません。パスワードを設定しないと、クラスタに接続できません。
  4. 接続パラメータをコードに入力します。
Fill the connection parameters
接続パラメータを入力

全文検索インデックスを持つテーブルを作成し、いくつかのサンプルデータを挿入します。

TiDBのハイブリッド言語検索機能を実証するために「Bluetooth イヤホン」に関連するいくつかの商品名 (日本語と英語の両方) をサンプルデータとして使用します。

from pytidb.schema import TableModel, Field
from pytidb.datatype import Text

class StockItem(TableModel, table=True):
    id: int = Field(primary_key=True)
    title: str = Field(sa_type=Text)

table = db.create_table(schema=StockItem)
table.create_fts_index("title")
table.bulk_insert([
    {"id": 1, "title": "イヤホン bluetooth ワイヤレスイヤホン "},
    {"id": 2, "title": "完全ワイヤレスイヤホン/ウルトラノイズキャンセリング 2.0 "},
    {"id": 3, "title": "ワイヤレス ヘッドホン Bluetooth 5.3 65時間再生 ヘッドホン 40mm HD "},
    {"id": 4, "title": "楽器用 オンイヤーヘッドホン 密閉型【国内正規品】"},
    {"id": 5, "title": "ワイヤレスイヤホン ハイブリッドANC搭载 40dBまでアクティブノイズキャンセル"},
    {"id": 6, "title": "Lightweight Bluetooth Earbuds with 48 Hours Playtime"},
    {"id": 7, "title": "True Wireless Noise Cancelling Earbuds - Compatible with Apple & Android, Built-in Microphone"},
    {"id": 8, "title": "In-Ear Earbud Headphones with Mic, Black"},
    {"id": 9, "title": "Wired Headphones, HD Bass Driven Audio, Lightweight Aluminum Wired in Ear Earbud Headphones"},
    {"id": 10, "title": "LED Light Bar, Music Sync RGB Light Bar, USB Ambient Lamp"},
])

全文検索を実行する方法

print(table.search("bluetoothイヤホン", search_type="fulltext").limit(3))

クエリの結果は関連度順に並べられ、最も関連性の高いドキュメントが最初に表示されます。

[
    {"id": 1, "title": "イヤホン bluetooth ワイヤレスイヤホン "},
    {"id": 6, "title": "Lightweight Bluetooth Earbuds with 48 Hours Playtime"},
    {"id": 2, "title": "完全ワイヤレスイヤホン/ウルトラノイズキャンセリング 2.0 "},
]

最新の情報については、以下の TiDB ドキュメントをご参照ください。

また、 pytidbのドキュメント および サンプルも併せてご参照ください。

TiDBのこれから

TiDB の全文検索機能は現在ベータ版ですが、今後も継続的にパフォーマンスや使いやすさの向上を図っていきます。たとえば、以下のような改善を予定しています:

  • CJK (中日韓) 言語に対する、より優れた検索結果の提供
  • より使いやすく柔軟なAPIの提供
  • 複数条件で使用する際の、より高いパフォーマンスとスケーラビリティの実現
  • TiDB Self-Managedクラスタへの対応

TiDBの全文検索とベクトル検索の機能を使って、皆さんがどのようなものを構築されるのかをとても楽しみにしています。ご質問やフィードバックがありましたら、ぜひ Discordコミュニティにご参加ください。皆さんのご意見が、TiDBをより良い製品へと進化させるための何よりの指針となります。


Have questions? Let us know how we can help.

Contact Us

TiDB Cloud Dedicated

TiDB Cloudのエンタープライズ版。
専用VPC上に構築された専有DBaaSでAWSとGoogle Cloudで利用可能。

TiDB Cloud Serverless

TiDB Cloudのライト版。
TiDBの機能をフルマネージド環境で使用でき無料かつお客様の裁量で利用開始。