OSSデータベース調査 サーチエンジン編

# はじめに

OSS データベースを調査の際に、[DB-Engines Ranking](https://db-engines.com/en/ranking/) のトップ20にサーチエンジンが3つもランクインしています。
私が以前、REGZA や VARDIA の 全文検索エンジンを開発していたことと、近年、サーチエンジンの注目度は高いことから動向が気になっていました。

そこで、今回は各種 OSS サーチエンジンについてライセンス、サポート、導入実績、コミュニティの視点からまとめてみました。

![OSS_DBRanking4SearchEngine.jpg](https://qiita-image-store.s3.amazonaws.com/0/308856/b88c314d-fedd-8257-51d3-07a38f6bcf0f.jpeg)

# 調査対象となる OSS サーチエンジンについて

OSS サーチエンジンである Elasticsearch、Solr、Sphinx について調査してみました。

![OSS_SearchEngineRanking.jpg](https://qiita-image-store.s3.amazonaws.com/0/308856/02df1e32-a2ad-0870-4d0e-a94653c377fe.jpeg)

RDBMS、NoSQLデータベースについては、[OSSデータベース調査 RDBMS編](https://qiita.com/kanegoon/items/9597a4f70033b686ff16)、[OSSデータベース調査 NoSQLデータベース編](https://qiita.com/kanegoon/items/5ade64336d389feea4bc)をご覧下さい。

# Elasticsearch

Elasticsearchは、オープソースの高スケーラブルな全文検索および分析エンジンです。大容量のデータをすばやく、ほぼリアルタイムで保存、検索、分析できます。通常、検索の機能と要件が複雑なアプリケーションを強化する基礎となるエンジン/技術として使用されます。構造型、非構造型、地理情報、メトリックなど、多様なタイプの検索に対応しています。
全文検索のための有限状態トランスデューサを使用した転置インデックスや、数値データや地理データを格納するためのBKDツリー、分析用のカラムストアが実装されています。

**基本情報**

| 項目 | 内容 |
| :--- | :--- |
| ホームページ | https://www.elastic.co/products/elasticsearch |
| 最新バージョン| Version: 6.5.4 (2018-12-19) |
| 開発言語 | Java |
| 動作環境 | Java 8以降が必要。Oracle JDKバージョン1.8.0_131以上のバージョンの使用を推奨しています。<br>参照 : [Set up Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/setup.html)<br>CPU：マルチコアのプロセッサを推進<br>メモリ：64GB以上を推奨。32GB及び16GBでも動作可<br>参照 : [Hardware](https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html)<br>OS：CentOS/RHEL 6/7, Oracle Enterprise 6/7, Ubuntu 14/16/18, SLES12, openSUSE, Debian 8/9, Windows Server 2012/2016<br>参照 : [Support Matrix](https://www.elastic.co/jp/support/matrix)
| ライセンス | Apache License Version 2.0<br>https://github.com/elastic/elasticsearch |
| 特徴 | HTTP WebインターフェイスとスキーマフリーのJSONドキュメントを備えており、さまざまなユースケースに対応できる分散型RESTful検索が可能です。スケーラビリティに優れたマルチテナント対応のフルテキスト検索エンジン機能を提供します。<br>Elasticsearchは、特に、検索速度や分析柔軟性に優れています。強力な検索機能をシンプルに利用でき、データ蓄積/分析/可視化環境を容易に構築できます。<br>高度なリアルタイム分析、大規模分散、高可用性、マルチテナンシー、全文検索、ドキュメント指向、スキーマフリー、RESTfulAPI、データ保護機能を特徴とします。<br>参照 : [オープンソースの検索エンジン／Elasticsearchとは](https://www.ossnews.jp/oss_info/Elasticsearch) |
| 適している利用シーン | 大容量のデータをほぼリアルタイムで保存、検索、分析が必要なシステム<br>例えば、顧客が販売製品を検索できるオンラインWebストア、ログデータやトランザクションデータの解析。<br>参照 : [Elasticsearchリファレンス [5.4]  » 始めてみよう](https://www.elastic.co/guide/jp/elasticsearch/reference/current/getting-started.html) |
| 適していない利用シーン | トランザクションを必要とするようなシステム<br>参照 : [Elasticsearchでアプリを作ってみた。～メリットとデメリットを考える](https://mynavi-agent.jp/it/geekroid/2015/01/-elasticsearchfoursquarerestful-api-2015fukuokapm-fukuoka-perl-mongers-perl.html) |

**開発情報**

| 項目 | 内容 |
| :--- | :--- |
| 開発主体 | Elastic |
| 開発体制 | Contributor 943名。[Contributor License Agreement](https://www.elastic.co/jp/contributor-agreement)を締結する必要有ります。 |
| 参加企業 | Elastic |
| リポジトリ | https://github.com/elastic/elasticsearch |
| 開発コミュニティ | 機能追加リクエストやバグレポートはGitHubのIssuesで話し合われます。<br>https://github.com/elastic/elasticsearch/issues |
| 開発コミュニティ活動状況 | 月間 約240件のソースコード・コミット<br>https://github.com/elastic/elasticsearch/commits/master<br>月間issues更新 約200件<br>https://github.com/elastic/elasticsearch/issues |

**サポート情報**

| 項目 | 内容 |
| :--- | :--- |
| コミュニティサポート | [各種フォーラム](https://discuss.elastic.co/)や[メーリングリスト](https://discuss.elastic.co/t/email-only-interaction-with-the-forums/106)でサポート |
| コミュニティ活動状況 | 週間 240件のTopic投稿有り<br>https://discuss.elastic.co/c/elasticsearch |
| サポート企業 | Elastic |
| サポートメニュー/費用 | Elasticがサブスクリプションライセンスでサポートされている。価格は問い合わせ。<br>参照 : [サブスプリクション](https://www.elastic.co/jp/subscriptions)<br>また国内のパートナー企業が導入、技術サポート<br>参照 : [国内パートナー企業一覧](https://www.elastic.co/jp/about/partners/reseller) |

**歴史**

| 項目 | 内容 |
| :--- | :--- |
| 開発開始時期 | 2010年 Shay Banonが開発開始 |
| 開発の経緯 | 2010年　Shay banonが最初のElasticsearchを開発しOSS化。「ユーザが、もっと簡単に、本当に欲しいものを手に入れられるように」をコンセプトに開発<br>2012年　Elastic社を設立。現在、32ヶ国に渡る開発者と、100ヶ国を超えるコミュニティのメンバーがいます。<br>参照 : [Open Source Search & Analytics Elasticsearch](https://www.elastic.co/jp/about) |
| 最近のメジャーリリース履歴 | 2017-11-15 Version 6.0.0 : Cross Cluster Searchなど<br>2017-12-01 Version 6.1.0 : Shrink Index API、composite aggregationなど<br>2018/01/08 Version 6.2.0 : SAMLサポート、Rank Evaluation APIなど<br>2018-06-13 Version 6.3.0 :  X-Pack のデフォルト化、SQL 対応、Rollup、Java10 対応<br>2018-08-23 Version 6.4.0 : Kerberos 認証、FIPS 140-2 対応<br>2018-11-14 Version 6.5.0 : クロス・クラスター・レプリケーション、ODBC ドライバ、Java 11 対応<br>参照 : [Release Notes](https://www.elastic.co/guide/en/elasticsearch/reference/current/es-release-notes.html) |
| リリース頻度 | 年間 約35回　リリース<br>https://github.com/elastic/elasticsearch/releases |

**適用状況**

| 項目 | 内容 |
| :--- | :--- |
| 適用システム | 日経電子版の記事検索、ソフトバンク システム基盤本部のIT運用管理など多数<br>参照 : [導入事例](https://www.elastic.co/jp/use-cases)<br>AWS の Amazon Elasticsearch Service で利用<br>参照 : [Amazon Elasticsearch Service の機能](https://aws.amazon.com/jp/elasticsearch-service/details/) |
| 適用数 | <br>OEMパートナーが多数<br>参照 : [OEM, MSP, and CSP Partners](https://www.elastic.co/jp/about/partners/oem) |
| 適用企業 | ソフトバンク、富士通、星野リゾート、マイクロソフト、日本経済新聞社、Lineなど<br>参照 : [導入事例](https://www.elastic.co/jp/use-cases) |

# Solr

Solrは、Apache Luceneで非常に高速な、人気のある、オープンソース・エンタプライズ企探索プラットフォームです。Solrは、高信頼性、スケーラブル、フォルトトレラント、分散インデックスの提供、レプリケーション、ロードバランス・クエリ、自動フェイルオーバとリカバリ、集中化された設定などの特徴があります。

**基本情報**

| 項目 | 内容 |
| :--- | :--- |
| ホームページ | http://lucene.apache.org/solr/ |
| 最新バージョン| Version: 7.6.0 (2018-12-14) |
| 開発言語 | Java<br>参照 : [The Apache Sofrware Foundation](https://github.com/apache?utf8=%E2%9C%93&q=Solr&type=&language=) |
| 動作環境 | Java 8 以降が必要。JRE バージョン1.8以上のバージョンの使用を推奨しています。<br>OS : Linux, MacOS/OS X, Microsoft Windows<br>参照 : [Solr System Requirements](http://lucene.apache.org/solr/guide/7_6/solr-system-requirements.html#solr-system-requirements)<br>CPU：マルチコアのプロセッサを推進<br>メモリ：2 - 16GB以上で動作可<br>ストレージ : 高速 HDD ( 10,000 RPM / SEC 以上 )または SSD<br>参照 : [Solr: a High-level Overview for Sysadmins](http://www.solrtutorial.com/overview/solr-for-sysadmins.html) |
| ライセンス | Apache License Version 2.0<br>https://github.com/apache/lucene-solr/blob/master/solr/LICENSE.txt |
| 特徴 | 高度な全文検索能力、高負荷量の最適化、XML, JSON, HTTPのサポート、、総合的な管理者インタフェース、イージモニタリング、高スケーラブルとフォルトトレラント、イージコンフィグレーションでフレキシブルな適用、リアルタイムに近いインデクシング、拡張プラグイン・アーキテクチャを特徴とする。<br>参照 : [Solr Features](http://lucene.apache.org/solr/features.html) |
| 適している利用シーン | インターネットのサイト検索システムをはじめ、企業内でのファイルサーバや多様なデータの検索や知識共有システム、図書館の検索システム、SaaS、SNS、広告配信システム、政府系機関システムなど<br>[Apache Solr 事例紹介/サポートバージョン](https://openstandia.jp/oss_info/apachesolr/case-study.html)<br>部門の情報共有のためのスモールスタートから大規模なエンタープライズサーチやコンシューマ向け検索サービスにも対応します。<br>参照 : [Solr of オープンソースソフトウェアの悩みを解決する](http://www.ossplaza.com/oss_info/solr/index.html) |
| 適していない利用シーン | JOIN、GROUP BY などのSQLのような複雑な検索ができない。ロールバックなどのトランザクション処理ができない。<br>[solrを使う前に知っておくべき事](http://www.tree-tips.com/solr/use/notes/) |

**開発情報**

| 項目 | 内容 |
| :--- | :--- |
| 開発主体 | Apache Software Foundation |
| 開発体制 | Solr は、上位プロジェクトである Apache Lucene Committee で開発されている。<br>PMC ( Project Management Committee ) Chair 1名 ( Cassandra Targett 氏 )、PMC  Roster 50名, Committers 75名、Contoributors 273名<br>参照 : [Apache Lucene Committee](https://projects.apache.org/committee.html?lucene)、[How to Contribute to Solr](https://wiki.apache.org/solr/HowToContribute)
| 参加企業 | Apache Software Foundation |
| リポジトリ | https://git-wip-us.apache.org/repos/asf/lucene-solr.git |
| 開発コミュニティ | [開発者メーリングリスト](http://mail-archives.apache.org/mod_mbox/lucene-dev/)と[Commit 用メーリングリスト](http://mail-archives.apache.org/mod_mbox/lucene-commits/)を提供 |
| 開発コミュニティ活動状況 | 月間 約180件のソースコード・コミット<br>https://gitbox.apache.org/repos/asf?p=lucene-solr.git;a=shortlog |

**サポート情報**

| 項目 | 内容 |
| :--- | :--- |
| コミュニティサポート | [ユーザ用のメーリングリスト](http://mail-archives.apache.org/mod_mbox/lucene-solr-user/)、[一般的なディスカッション用メーリングリスト](http://lucene.apache.org/solr/community.html)を提供 |
| コミュニティ活動状況 | メーリングリストに月間約 300件の投稿 |
| サポート企業 |多くの企業がサポートやコンサルタントを行っているようですが、国内では atilika、ロンウイットがサポート<br>参照 : [Support for Solr](https://wiki.apache.org/solr/Support)
| サポートメニュー/費用 | 例：ロンウイット の Solr サブスクリプション・パッケージ<br>バグフィックスパッチのご提供や回避策の提示、最適な解決策の提供<br>参照 : [Solr サブスクリプション・パッケージ](https://www.rondhuit.com/products.html)<br>サブスプリクション以外にもコンサルティングサービスやトレーニングもあります。<br>参照 : [コンサルティングサービス](https://www.rondhuit.com/services/consulting.html)、[トレーニング](https://www.rondhuit.com/services/training.html) |

**歴史**

| 項目 | 内容 |
| :--- | :--- |
| 開発開始時期 | 2004年 CNET Networks が開発開始 |
| 開発の経緯 | 2004年 CNET Networks 社内プロジェクトで Yonik Seeley 氏が Web サイトの検索機能を開発<br>2006-01 CNET Networks は、Apache Software Foundation の Lucene プロジェクトにソースコードを OSS として寄贈<br>2008-09 分散検索機能を含んだ機能と性能を強化して、Solr 1.3 をリリース<br>2012-10 Solr Cloud 機能を含んだ Solr 4.0 をリリース<br>参照 : [Intorduction Apache Solr](https://www.youtube.com/watch?v=TKcHFpJduOE)
| 最近のメジャーリリース履歴 | 2015-04 5.0 日付範囲インデクシングのためDateRangeField追加、TransactionLog<br>2016-04 6.0 パラレルSQL、JDBCドライバ<br>2017-09 7.0 ReplicaType の追加、Auto-scaling、API が XML から JSON、Facetの改善<br>https://github.com/apache/lucene-solr/releases |
| リリース頻度 | 年間 9回のリリース |

**適用状況**

| 項目 | 内容 |
| :--- | :--- |
| 適用システム | 日本経済新聞社 : 英文メディアサイト Nikkei Asian Review<br>参照 : [WEBSAS : 実績紹介](http://websas.jp/case_study/case17)<br>AWS の Amazon CloudSearch で使用されています。 <br>参照 : [Amazon CloudSearch よくある質問](https://aws.amazon.com/jp/cloudsearch/faqs/)|
| 適用数 | WEBサイトを中心に多くの企業で使用されています。<br>参照 : [PubulicServvers](https://wiki.apache.org/solr/PublicServers)
| 適用企業 | Goldman Sachs, Disney, Apple, CISCO, Netflix など <br>参照 : [PubulicServvers](https://wiki.apache.org/solr/PublicServers) |

# Sphinx

Sphinx は、パフィーマンス、関連、統合を全てシンプルに設計したオープンソース・フルテキスト検索サーバです。
Pythonドキュメント・ジェネレータのSphinxとは別モノなので注意が必要です。

**基本情報**

| 項目 | 内容 |
| :--- | :--- |
| ホームページ | http://sphinxsearch.com |
| 最新バージョン| Version: 3.1.1 (2018-10-17) |
| 開発言語 | C++<br>参照 : [About Sphinx](http://sphinxsearch.com/about/sphinx/) |
| 動作環境 | OS : 以下の OS をサポート<ul><li>Linux 2.4.x, 2.6.x, 3.x (many various distributions)</li><li>Windows 2000, XP, 7, 8</li><li>FreeBSD 4.x, 5.x, 6.x, 7.x, 8.x</li><li>NetBSD 1.6, 3.0</li><li>Solaris 9, 11</li><li>Mac OS X</li></ul>CPU : x86, x86_64, amd64, SPARC64, and ARM<br>参照 : [Sphinx 2.3.2-beta reference manual](http://sphinxsearch.com/docs/manual-2.3.2.html)<br> |
| ライセンス | Sphinx 2系は製品ライセンスと GPL version 2 のデュアルライセンスです。<br>Sphinx 3系は現在、製品ライセンスのみです。<br>http://sphinxsearch.com/services/embedding/ |
| 特徴 | バッチとリアルタイム・フルテキスト・インデックス、非テキスト属性をサポート、SQLデータベース・インデクシング(MySQL, PostgreSQL, Oracle, Microsoft SQL Server, SQLite, Drizzle などと連携)、非SQLストレージインデクシング、アプリケーションとの統合が簡単、複雑なフルテキスト検索、SQLが利用可能、分散検索などの特徴があります。<br>参照 : [About Sphinx](http://sphinxsearch.com/about/sphinx/) |
| 適している利用シーン | 動的な高速フルテキスト検索を必要とするシステムなど<br>[Sphinx Case Studies](http://sphinxsearch.com/info/studies/) |
| 適していない利用シーン | 情報がありませんでしたが、<br>トランザクションを必要とするようなシステムには向いていないと思われます。 |

**開発情報**

| 項目 | 内容 |
| :--- | :--- |
| 開発主体 | Sphinx Technologies |
| 開発体制 | GitHub の Contributors は 8名<br>参照 : [Contributors : spinx search](https://github.com/sphinxsearch/sphinx/graphs/contributors) |
| 参加企業 | Sphinx Technologies<br>[Sponsored and Custom development](http://sphinxsearch.com/services/development/) で参加企業を募集しています。 |
| リポジトリ | https://github.com/sphinxsearch/sphinx/<br>ただし、Sphinx 3.0 以上はソースコードを公開していない。 |
| 開発コミュニティ | [Forum](http://mail-archives.apache.org/mod_mbox/lucene-dev/)と[BugTracker](http://sphinxsearch.com/bugs/my_view_page.php)を提供 |
| 開発コミュニティ活動状況 | 3年間で 28 件の Pull Requests<br>[Pull Requests : spinx search](https://github.com/sphinxsearch/sphinx/pulls) |

**サポート情報**

| 項目 | 内容 |
| :--- | :--- |
| コミュニティサポート | [Forum](http://mail-archives.apache.org/mod_mbox/lucene-dev/), [Wiki](http://sphinxsearch.com/wiki/doku.php), [BugTracker](http://sphinxsearch.com/bugs/my_view_page.php)を提供 |
| コミュニティ活動状況 | Forumに月間約 20件の投稿 |
| サポート企業 | Sphinx Technologies |
| サポートメニュー/費用 | サポートパッケージが用意されている。費用については要問い合わせ。<br>参照 : [Sphinx Enterprise Support Package Matrix](http://sphinxsearch.com/services/packages/) |

**歴史**

| 項目 | 内容 |
| :--- | :--- |
| 開発開始時期 | 2001年  Andrew Aksyonoff が開発開始 |
| 開発の経緯 | 2001年 Andrew Aksyonoff が既存データベースのフルテキスト検索の問題点(検索品質、検索速度、インデクシング時のCPU, ディスク条件)を解決するために、Sphinxの開発を開始した。 <br>参照 : [Sphinx Hisstory](http://sphinxsearch.com/docs/current/installation.html)
| 最近のメジャーリリース履歴 | 2016-09 2.3.2 mmapを使用した検索、デーモン対応とインデクシング処理スレッド分離、HTTPプロトコル・インタフェース<br>https://github.com/sphinxsearch/sphinx/releases |
| リリース頻度 | 年間 1回ぐらいのリリース |

**適用状況**

| 項目 | 内容 |
| :--- | :--- |
| 適用システム | レンタルサービス、ビッグデータ・ログ解析など<br>参照 : [Sphinx Case Studies](http://sphinxsearch.com/info/studies/)|
| 適用数 | WEBサイトを中心に多くの企業で使用されています。<br>参照 : [Powered by Sphinx](http://sphinxsearch.com/info/powered/)
| 適用企業 | Infegy, Boardreader, craigslist など <br>参照 : [Powered by Sphinx](http://sphinxsearch.com/info/powered/) |

# 最後に

今回調査対象とした OSS サーチエンジンは機能的に大きな差がないように見えます。Elasticsearch、Solr は、既に多くの導入実績がありコミュニティの活動も活発なことから、導入対象としての選択肢としては、十分に対象となると考えられます。
Sphinx はライセンスがデュアルライセンスとなっていて、ライセンスによって機能や性能が異なりますので、導⼊する際にはライセンス条項を確認する必要があります。また、Sphinx は国内のサポート企業がないので注意が必要です。

もし、記述について誤りがあったり、気になることがあれば、編集リクエストやコメントでフィードバックしていただけると助かります。