はじめに
フルテキスト検索は、現代の検索エンジンやデータベースシステムにおいて重要な技術です。単純な文字列マッチングとは異なり、言語的な特性を考慮した高度な検索を実現します。
本記事では、フルテキスト検索の内部処理について、3つのステップに分けて詳しく解説します。
フルテキスト検索とは
フルテキスト検索とは、単純な完全一致検索ではなく、
テキスト内容を言語的に分析して検索する手法のことです。
従来の検索との違い
従来の検索: "hotel" → "hotel"を含む文書のみヒット
フルテキスト検索: "hotel" → "hotel", "hotels", "Hotel"なども含めてヒット
フルテキスト検索の処理フロー
フルテキスト検索は以下の3つのステップで処理されます:
ユーザー入力 → ①クエリ解析 → ②字句解析 → ③ドキュメント取得&スコアリング → 検索結果
①クエリ解析(Query Parsing)
概要
ユーザーが入力したクエリを、実際の検索処理で使用するワードに変換する作業です。
最終的に抽象構文ツリー(AST)に変換されます。
主要なクエリタイプ
1. 用語クエリ(Term Query)
単一の単語を検索するクエリ
入力: hotel
処理: "hotel"という単語を含む文書を検索
2. フレーズクエリ(Phrase Query)
引用符で囲まれた複数単語の完全なフレーズを検索
入力: "free parking"
処理: "free"と"parking"が隣接して現れる文書を検索
3. プレフィックスクエリ(Prefix Query)
指定されたプレフィックス(接頭辞)で始まる用語を検索
入力: air*
マッチ: airport, airline, air-conditioning など
クエリ解析の例
入力クエリ: "luxury hotel" AND air* OR parking
抽象構文ツリー(AST):
OR
/ \
AND Term
/ \ (parking)
Phrase Prefix
("luxury hotel") (air*)
②字句解析(Lexical Analysis)
概要
クエリ用語とドキュメント内のテキストを、言語ルールに基づいて正規化し、検索精度を向上させる処理です。
主要な処理
1. 小文字への変換
Hotel → hotel
FREE → free
2. ストップワードの除去
検索に不要な一般的な単語を除去
日本語: は、が、の、です、ます
英語: the, a, an, is, are
3. 語幹抽出・原型変換
単語を基本形に変換
英語: comfortable → comfort, running → run
日本語: 走っている → 走る, 美しかった → 美しい
4. 複合語の分割
air-conditioning → air + conditioning
駅前ホテル → 駅前 + ホテル
字句解析の効果
入力: "comfortable hotels"
解析後: "comfort hotel"
これにより、文書内に「comfort hotel」「comfortable hotel」「hotels with comfort」などがあっても、すべてヒットするようになります。
③ドキュメント取得&スコアリング
概要
処理されたクエリに基づいて関連するドキュメントを取得し、関連度に応じてスコアリングを行います。
ドキュメント取得
- 字句解析されたクエリ用語をインデックスと照合
- 一致するドキュメントセットを特定
スコアリング
各ドキュメントに関連度スコアを付与。一般的にTF-IDFアルゴリズムが使用されます。
TF-IDF の構成要素
TF(Term Frequency): 用語頻度
- ドキュメント内でのキーワード出現回数
- 多く出現するほど関連度が高い
IDF(Inverse Document Frequency): 逆文書頻度
- 全体での用語の希少性
- 珍しい単語ほど重要度が高い
スコアリング例
検索語:「機械学習」
文書A: 「機械学習」が5回出現、全体で「機械学習」を含む文書は少ない
→ 高スコア
文書B: 「機械学習」が1回出現、全体で「機械学習」を含む文書は多い
→ 低スコア
結果の並び替え
スコアの高い順にドキュメントを並び替えて、ユーザーに提示します。
具体的な処理例
入力クエリ
"東京 ホテル" 駅近 安い
①クエリ解析
フレーズクエリ: "東京 ホテル"
用語クエリ: 駅近
用語クエリ: 安い
②字句解析
"東京 ホテル" → "東京 ホテル" (フレーズはそのまま)
駅近 → 駅近
安い → 安 (語幹抽出)
③ドキュメント取得&スコアリング
- 「東京 ホテル」というフレーズを含む文書を検索
- 「駅近」「安」を含む文書を検索
- 各文書にTF-IDFスコアを計算
- スコア順に結果を返却
まとめ
フルテキスト検索は以下の3つのステップで実行されます:
- クエリ解析: ユーザー入力をASTに変換
- 字句解析: テキストの正規化と言語処理
- ドキュメント取得&スコアリング: 関連文書の特定と関連度算出
これらの処理により、単純な文字列マッチングでは実現できない、柔軟で精度の高い検索が可能になります。
現代の検索システム(Elasticsearch、Solr、Azure AI Searchなど)は、すべてこの仕組みを基盤として構築されており、理解することで効果的な検索システムの設計・運用が可能になります。
参考情報
- Lucene:オープンソースの全文検索ライブラリ
- Elasticsearch:分散型検索・分析エンジン
- Azure AI Search:Microsoft Azureの検索サービス