MENU

Sphinx Search — 2001年から続くC++製の老舗全文検索

Sphinx Search アイキャッチ
Sphinx Search

Sphinx Searchは2001年にロシアのAndrew Aksyonoff氏によって開発が始められた、C++製のオープンソース全文検索エンジンです。MySQLのテーブルを直接インデックス化できる「SphinxQL」というMySQLプロトコル互換のインターフェースを持ち、データベースに格納されたコンテンツを高速に検索するというユースケースで一世を風靡しました。ピーク時はCraigslist、MediaWiki、Joomla、Tumblrといった大規模サービスが採用しており、2010年前後にはLuceneと並ぶ全文検索の二大選択肢として認識されていた歴史を持ちます。現在はオリジナルのSphinx本体の開発は緩やかになっていますが、後述するManticore Searchという後継フォークが2017年以降活発に開発を継続しています。

目次

この記事の目次

  1. 誕生の経緯とMySQL連携の発明
  2. アーキテクチャと検索の特徴
  3. 繁栄期からフォーク分裂まで
  4. 現在の位置付けと参考価値
  5. まとめ

誕生の経緯とMySQL連携の発明

誕生の経緯とMySQL連携の発明

Sphinxの開発はAndrew Aksyonoff氏が2001年に個人プロジェクトとして始め、自身が手がけていたCMS製品のための検索エンジンとして産声を上げました。「SQL phrase index」を縮めた名前にちなみ、MySQLとPostgreSQLのテーブルを直接データソースとして取り込めるアーキテクチャを最初から備えていた点が特徴的でした。2004年に最初の公開版がリリースされ、2008年のv0.9.8で安定性とパフォーマンスが大きく向上し、世界的に利用される検索エンジンになりました。

SphinxはGPLv2ライセンスで提供され、SQLライクなクエリ言語SphinxQLとXML/RPCに似た独自プロトコルの両方を持ち、PHP、Python、Java、Perl、Rubyなど主要言語のクライアントが整備されていました。ピーク時のSphinx 2.x系(2011〜2014年)はCraigslistの数十億ドキュメント規模の本番検索を支え、MediaWiki経由でWikipediaの一部プロジェクトでも採用され、「LAMP環境の標準的な検索エンジン」というポジションを獲得した時代があります。

アーキテクチャと検索の特徴

アーキテクチャと検索の特徴

Sphinxは「indexer」と「searchd」という二つのコンポーネントで構成されます。indexerはMySQL等のソースからレコードを読み出してインデックスファイルを生成するバッチプロセスで、searchdはそのインデックスをメモリにマップして検索リクエストを処理する常駐デーモンです。この分離設計により、検索処理は読み取り専用に最適化されており、低レイテンシでの応答が可能になっていました。

Sphinx v0.9.9以降はRT Index(Real-Time Index)と呼ばれるリアルタイム書き込み対応のインデックス種別が導入され、INSERT/REPLACE/DELETEが即座に検索結果へ反映される構造になりました。BM25スコアリング、フィールド重み付け、ストップワード、形態素解析(mystem連携、CJKのn-gramなど)、ファセット集計、地理検索などの機能を備え、検索エンジンとして必要な機能はほぼ揃っていました。C++実装ゆえメモリ使用量と応答速度のバランスが良く、当時のJava製エンジンであるLuceneやSolrと比較しても遜色のないパフォーマンスを示していました。

繁栄期からフォーク分裂まで

繁栄期からフォーク分裂まで

Sphinxの絶頂期は2010年代前半で、Craigslistでは数十億件の広告データを単一クラスタで検索する本番システムを支えていました。MediaWikiはMySQLのMATCHベース検索の代替としてSphinxを公式にサポートし、JoomlaやTumblr、Mailgunの内部ツールなど、PHPベースの大規模Webサービスで広範に採用されていました。LuceneやSolrが当時のJavaエコシステムを代表する選択肢だったのに対し、SphinxはLAMP環境とMySQL連携を強みとする位置付けで明確な棲み分けがありました。

しかし2015年以降、Sphinx 3.x系がプロプライエタリ路線に転換した影響でコミュニティが分裂しました。オープンソース版(Sphinx 2.x系GPL)の開発ペースが落ち、ライセンス問題への懸念から2017年にコアコントリビュータがフォークし、Manticore Searchとして独立開発が始まりました。現在ではOSSコミュニティの主流は事実上Manticoreへ移っており、新規採用において純粋なSphinxを選択するケースは稀です。それでも「老舗の安定した検索エンジン」として既存システムでは現役で動き続けている事例も多く残っています。

現在の位置付けと参考価値

現在の位置付けと参考価値

Sphinx Searchは現在進行形で新規採用される選択肢ではないものの、検索エンジン技術史を理解するうえで欠かせない存在です。MySQLテーブルを直接インデックスに取り込む発想、SphinxQLというSQL互換クエリ言語、RT Indexによる即時更新、いずれも後発の検索エンジンに大きな影響を与えてきました。ElasticsearchがRESTで「ドキュメントを投げ込んで検索する」発想を広めたのに対して、Sphinxは「データベースの拡張としての検索」という設計思想を確立したエンジンと言えます。

新規プロジェクトで全文検索エンジンを採用する場合、後述のManticore Searchが事実上Sphinxの正当な後継として候補に挙がります。オリジナルSphinxを直接採用する選択肢は、既存システムの保守や、Sphinx前提のレガシーアプリケーションのメンテナンス文脈に限られるのが現状です。とはいえ「2001年から続く検索エンジン」というその系譜は、Lucene、Solr、Elasticsearch、OpenSearchと並んでOSS検索の歴史を語るうえで外せないピースであり続けています。

まとめ

Sphinx SearchはAndrew Aksyonoff氏が2001年に立ち上げた老舗のC++製全文検索エンジンで、MySQLとの密接な連携で2000年代後半から2010年代前半のWeb検索を支えてきました。現在では後継のManticore Searchが実質的な発展形となっており、Sphinx本体の新規採用は減少傾向にあるものの、検索エンジン史を語るうえで欠かせない一本として確かな地位を残し続けています。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次