0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

フルテキスト検索の仕組みを理解する

0
Posted at

はじめに

フルテキスト検索は、現代の検索エンジンやデータベースシステムにおいて重要な技術です。単純な文字列マッチングとは異なり、言語的な特性を考慮した高度な検索を実現します。

本記事では、フルテキスト検索の内部処理について、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回出現、全体で「機械学習」を含む文書は多い
→ 低スコア

結果の並び替え

スコアの高い順にドキュメントを並び替えて、ユーザーに提示します。


具体的な処理例

入力クエリ

"東京 ホテル" 駅近 安い

①クエリ解析

フレーズクエリ: "東京 ホテル"
用語クエリ: 駅近
用語クエリ: 安い

②字句解析

"東京 ホテル" → "東京 ホテル" (フレーズはそのまま)
駅近 → 駅近
安い → 安 (語幹抽出)

③ドキュメント取得&スコアリング

  1. 「東京 ホテル」というフレーズを含む文書を検索
  2. 「駅近」「安」を含む文書を検索
  3. 各文書にTF-IDFスコアを計算
  4. スコア順に結果を返却

まとめ

フルテキスト検索は以下の3つのステップで実行されます:

  1. クエリ解析: ユーザー入力をASTに変換
  2. 字句解析: テキストの正規化と言語処理
  3. ドキュメント取得&スコアリング: 関連文書の特定と関連度算出

これらの処理により、単純な文字列マッチングでは実現できない、柔軟で精度の高い検索が可能になります。

現代の検索システム(Elasticsearch、Solr、Azure AI Searchなど)は、すべてこの仕組みを基盤として構築されており、理解することで効果的な検索システムの設計・運用が可能になります。

参考情報

  • Lucene:オープンソースの全文検索ライブラリ
  • Elasticsearch:分散型検索・分析エンジン
  • Azure AI Search:Microsoft Azureの検索サービス
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?