Skip to content

検索エンジンの原理

はじめに

淘宝(タオバオ)で「赤いワンピース」を検索すると、0.1秒で数十億の商品から最も関連性の高い結果が見つかる——これはどのように実現されているのか? 検索エンジンはインターネットの最も核心的なインフラの一つであり、GoogleからECサイト内検索まで、その核心原理は同じです:転置インデックス + 関連性ランキング。

この記事で学べること

この章を学び終えると、次の能力が身につきます:

  • 転置インデックス:検索エンジンの最も核心的なデータ構造を理解
  • トークナイズ技術:中国語の分かち書きの課題と一般的なアプローチを理解
  • 関連性ランキング:TF-IDFとBM25の基本原理を習得
  • Elasticsearch:最も人気のある検索エンジンのアーキテクチャとユースケースを理解
  • 検索最適化:同義語、スペル修正、ハイライト表示などの実用的な検索機能を習得
内容コアコンセプト
第1章転置インデックス正順インデックス vs 転置インデックス
第2章トークナイズと分析中国語分かち書き、ストップワード、ステミング
第3章関連性ランキングTF-IDF、BM25
第4章Elasticsearch分散アーキテクチャ、シャード、レプリカ
第5章検索最適化同義語、スペル修正、オートコンプリート

0. 全景図:検索の本質とは?

検索の本質は情報検索(Information Retrieval)問題です:あるクエリが与えられたとき、大量のドキュメントから最も関連性の高い結果を見つけ、関連性順に並べて返すこと。

このプロセスは2つの段階に分かれます:

  • インデックス段階(オフライン):事前にすべてのドキュメントを処理し、効率的な検索構造を構築
  • クエリ段階(オンライン):ユーザーがキーワードを入力したとき、マッチするドキュメントを素早く見つけてランキング

なぜデータベースのLIKEクエリではダメなのか?

SELECT * FROM products WHERE name LIKE '%赤いワンピース%' は検索できそうに見えますが、フルテーブルスキャン——1行ずつすべてのレコードをチェックする必要があります。データ量が数百万レベルに達すると、このクエリは遅すぎて使い物になりません。転置インデックスはこの O(n) の操作を O(1) の検索に変えます。


1. 転置インデックス:検索エンジンの「心臓」

従来のデータベースは正順インデックスを使用します:ドキュメントIDからドキュメント内容を見つける。一方、検索エンジンは転置インデックスを使用します:キーワードからそれを含むドキュメントリストを見つける。

Inverted Index
Type a search term to see how an inverted index works
Source documents
Doc 1Apple is a common fruit
Doc 2Apple released a new phone
Doc 3I like eating fruit and vegetables
Doc 4This phone has a practical price
Doc 5The fruit shop has apples and bananas
Inverted index table
apple[1][2][5]
fruit[1][3][5]
phone[2][4]
company[2]
release[2]
like[3]
vegetables[3]
price[4]
practical[4]
banana[5]
common[1]
インデックスタイプ方向検索方法適したシーン
正順インデックスドキュメント → 内容IDを知って内容を検索データベースの主キークエリ
転置インデックスキーワード → ドキュメントリストキーワードを知ってドキュメントを検索全文検索

転置インデックスの構築プロセス

  1. ドキュメント収集:検索対象となるすべてのドキュメントを取得
  2. トークナイズ(Tokenization):ドキュメントを個々の単語に分割
  3. マッピング構築:各単語がどのドキュメントに出現するかを記録(出現位置、頻度など)
  4. 永続化保存:インデックスをディスクに書き込み、高速検索をサポート

2. トークナイズとテキスト分析

トークナイズは検索エンジンの第一歩であり、中国語検索の最大の課題でもあります。英語は自然にスペースで単語が区切られますが、中国語には区切り文字がありません——「乒乓球拍卖了(卓球ラケットが売れた)」は「乒乓球/拍卖/了(卓球/オークション/した)」または「乒乓/球拍/卖/了(ピンポン/ラケット/売った/た)」と分割できます。

トークナイズ方式説明
標準トークナイズスペースと句読点で分割(英語)"hello world" → ["hello", "world"]
中国語トークナイズ辞書またはモデルベースで分割"搜索引擎(検索エンジン)" → ["搜索(検索)", "引擎(エンジン)"]
N-gram固定長のスライディングウィンドウで分割"搜索(検索)" → ["搜索(検索)", "索引(インデックス)"]
カスタム辞書ビジネス固有の単語を追加"iPhone16ProMax" を1つの単語として

テキスト分析パイプライン

トークナイズはテキスト分析の一歩に過ぎず、完全なパイプラインには以下が含まれます:

  1. 文字フィルタリング:HTMLタグ、特殊文字の除去
  2. トークナイズ:テキストを単語(Token)に分割
  3. ストップワードフィルタリング:「的(の)」「了(た)」「是(である)」などの意味のない高頻度語を除去
  4. 同義語拡張:「手机(携帯電話)」を「手机(携帯電話)、电话(電話)、移动电话(移動電話)」に拡張
  5. ステミング:"running" を "run" に還元(英語)

3. 関連性ランキング:どの結果が最も「関連性が高い」か?

マッチするドキュメントを見つけるのは第一歩に過ぎず、より重要なのはランキング——最も関連性の高い結果を先頭に表示することです。

アルゴリズム原理特徴
TF-IDF単語頻度(TF) × 逆文書頻度(IDF)古典的アルゴリズム、シンプルで効果的
BM25TF-IDFの改良版、文書長正規化を追加Elasticsearchのデフォルトアルゴリズム
ベクトル検索文書とクエリをベクトルに変換し、コサイン類似度を計算セマンティック検索をサポート

TF-IDFの直感的理解

  • TF(単語頻度):ある単語が文書に出現する回数が多いほど、その文書はその単語に関連する可能性が高い
  • IDF(逆文書頻度):ある単語が出現する文書が少ないほど、その単語の識別力は高い
  • 「的(の)」はすべての文書に出現する(IDFが低い)ため、「的」で検索しても意味がない
  • 「Elasticsearch」は少数の文書にしか出現しない(IDFが高い)ため、検索すると正確に特定できる

4. Elasticsearch:最も人気のある検索エンジン

Elasticsearchは現在最も人気のあるオープンソース検索エンジンで、Apache Luceneをベースに構築され、分散型でRESTful APIの全文検索機能を提供します。

概念説明
Indexデータベースの「テーブル」に相当、同種のドキュメントを保存
Document1件のレコード、JSON形式
Shardシャード、インデックスを複数ノードに分割
Replicaレプリカ、高可用性と読み取り拡張を提供
Mappingフィールドタイプ定義、データベースのスキーマに相当
Analyzerテキストアナライザー、トークナイズルールを定義

ES vs データベース

Elasticsearchはデータベースを置き換えるものではなく、データベースと連携して使用する検索層です。典型的なアーキテクチャ:データをデータベースに書き込み → ESに同期 → 検索リクエストはESへ → 詳細リクエストはデータベースへ。


5. 検索最適化:検索をより「賢く」

最適化手段説明効果
同義語「手机(携帯電話)」でも「电话(電話)」が検索できる再現率の向上
スペル修正"iphoen" を自動的に "iphone" に修正フォールトトレランス
オートコンプリート「苹(リンゴ)」と入力すると「苹果手机(iPhone)」をサジェスト体験の向上
ハイライト検索結果内のマッチ語を赤く表示直感的な表示
重み調整タイトルマッチの重み > 内容マッチ精度の向上
フィルタリングと集約価格帯、ブランドで絞り込み範囲の縮小

まとめ

検索エンジンはインターネットアプリケーションの核心的なインフラです。転置インデックス、トークナイズ、関連性ランキングの3つの核心概念を理解すれば、検索エンジンの本質を把握したことになります。

本章の重要ポイントを振り返ります:

  1. 転置インデックス:キーワードからドキュメントへの逆方向マッピング、検索エンジンの核心データ構造
  2. トークナイズが基礎:中国語の分かち書きは検索品質の鍵であり、適切なトークナイザの選択が必要
  3. BM25ランキング:単語頻度と文書頻度に基づく関連性スコアリング、ESのデフォルトアルゴリズム
  4. ESアーキテクチャ:シャード + レプリカで分散と高可用性を実現
  5. 検索最適化:同義語、スペル修正、自動補完で検索をよりスマートに

参考資料