SolrとElasticsearchを比べてみよう
Tech Talks
 名前: 菅谷信介
 所属: N2SM, Inc.
 オープンソース活動:
 Apache Portals (Jetspeed2など) コミッタ
 Seasarプロジェクトコミッタ(S2Container,
Teeda, SAStruts, DBFlute, S2Portlet,
S2Robot..)
 Fessプロジェクト運営
などなど・・・
 Github: https://github.com/codelibs
 Blog: http://www.chazine.com/
 Twitter: https://twitter.com/shinsuke_sugaya/
自己紹介
アジェンダ
 Solrとは
 Elasticsearchとは
 SolrとElasticsearchの比較
 まとめ
検索ライブラリ
Luceneなど
検索サーバ
Solr、Elasticsearch、groongaなど
検索サーバ+クローラ
Hyper Estraier、Namazu、Nutchなど
検索システム
Fess、商用検索システム(GSAとか)
検索関連のソフトウェア
まず、検索業界的な話…
検索関連の知識が必要
検索関連の知識なくても利用可能
Apache Solr
 オープンソースのエンタープライズ検索プラットフォーム
 開発元:Apache Software Foundation (2007~)
 特徴
 高度な全文検索機能
 大量のウェブトラフィックに最適化
 XML, JSONやHTTPのインターフェース
 包括的なHTMLの管理画面
 監視用にJMXで利用可能なサーバ統計情報
 リニアにスケール可能、自動インデックスレプリケー
ション、自動フェールオーバーと復旧
 リアルタイムインデクシング
 XMLでの柔軟なカスタマイズ性
 拡張可能なプラグインアーキテクチャ
Apache Solr http://lucene.apache.org/solr/
 最近、リリースのペースが速い
 全文検索としては実績や信頼性が高い
 政治的なところでゴタゴタしている
 Elasticsearchとの競い合っている気がする
 SolrCloudはElasticsearchと比べてしまうと作る
のがちょっと面倒
 サジェストが日本語環境で使いにくい
 まるっと全文検索システムがほしいならFessだね
Solrへの個人的な感想
Elasticsearch
 オープンソースの分散リアルタイム検索&分析エンジン
 開発元:Elasticsearch (2010~)
 特徴
 リアルタイムデータが扱える
 リアルタイム分析
 分散環境(スケールできる)
 高可用性
 マルチテナント
 全文検索
 ドキュメント志向
 衝突管理(楽観的バージョン制御)
 スキーマフリー
 RESTful API
 操作単位での永続性(トランザクションログ)
Elasticsearch http://www.elasticsearch.org/
 月一くらいでリリースしてくる
 Webサイトのドキュメントがわかりにくいので、
情報はググるのが良い
 スキーマフリーはあまり現実的ではない
 Elasticsearchの企業としては、かなりの投資され
ている (お金がありそう)
 LuceneのコミッターがElasticsearchに流れている
 クラスタを組むのは非常に簡単
 プラグインを作れば簡単に拡張ができる
 問題に遭遇したら、解決にはそれなりのスキルが
必要…
Elasticsearchへの個人的な感想
比較
個人的な観点でまとめる…
一応…
世の中には
http://solr-vs-elasticsearch.com/
という感じでまとめてくれる人もいるので
細かいことはそのあたりを
見ると良いかも…
検索クエリー
Solr
 「Foo Bar」のようなクエリー文字列
 わかりやすいが、複雑なものは微妙かも
 リクエストパラメータで指定 (ファセット等)
Elasticsearch
 構造的なクエリーDSL
 慣れれば複雑なクエリーも書きやすい
 RESTfulなAPI
 Solrな人はquery_stringから使いはじめると良い
かも…
Solrは直観的、Elasticsearchは学習コストがあるが
クエリーDSLは慣れれば使いやすい
検索クエリー(例)
Solr
http://…/select/?wt=json&indent=on&q=video+card&fl
=name,id&hl=true&hl.fl=name
Elasticsearch
{
“query” : {
"query_string" : {
"default_field" : "content",
"query" : "this AND that OR thus"
}
},
“size”: 10
}
高度な検索
共通
 空間検索、ファセット、類似文書検索、フィルタ
クエリー、ハイライト、スクロール取得、など
Solr
 Results Groupingが可能
(Elasticsearch 1.3で同様のことが可能になるらしい…)
Elasticsearch
 Percolatorが可能
 Aggregationは分析には便利
多少の差はあるが互いに実装される可能性はある
API
Solr
 XML, CSV, JSON, バイナリでの応答が可能
 クライアントライブラリはSolrJやサードパーティ
製がいろいろある
Elasticsearch
 JSON, YAML, SMILE, バイナリでの応答が可能
 バイナリでの通信はTransportClientを利用
 クライアントライブラリはサードパーティ製がい
ろいろある
どちらも大差はないが、Elasticsearchの
ドキュメント志向の方がわかりやすいかも
アーキテクチャ
Solr
 サーブレットベース
 solrconfig.xmlで独自にコンポーネント管理
Elasticsearch
 API等の通信まわりはNettyを利用
 Guiceベースのコンポーネント管理
Guiceでコンポーネント管理されているので
Elasticsearchの方がコードはすっきりしている
インデックス構造
Solr
 コア単位にドキュメントが保存される
SolrCloud
 コレクション単位にドキュメントが保存される
 コレクションは複数のシャードで構成される
 シャードは複数のノードに配置される
Elasticsearch
 インデックス単位にドキュメントが保存される
 インデックスは複数のシャードで構成される
 シャードは複数のノードに配置される
インデックス構造(図)
Solr SolrCloud/Elasticsearch
Core Shard
Index/Collection
Shard
Shard
Shard
Index/Collection
Cluster
Core
スキーマ(データ型)
Solr
 schema.xmlにフィールド型を指定する
 Solr 4.4からスキーマレスも可能
Elasticsearch
 何もしないとスキーマレスで利用可能
 typeごとにmappingで指定する
スキーマレスでも利用可能だが
きちんと定義して利用するのが安全
クラスタ
Solr
 SolrCloudを構築する
 ZooKeeperでノード管理する
Elasticsearch
 起動すればクラスタになる
 ZenDiscoveryでノード管理する
 ZenDiscovery以外の方法でもノード管理が可能
 自動でシャードのリバランスが可能
Elasticsearchは標準でクラスタ構成を
意識しているので、構築が容易
分散検索
Solr
 shardsリクエストパラメータで指定する
SolrCloud
 SolrJのCloudSolrServerを利用する
(ZooKeeperを利用)
Elasticsearch
 デフォルトで分散検索
 search_typeやpreferenceなどで調整できる
Elasticsearchの方が分散検索の
パラメータのチューニングしやすい
リアルタイム
Solr
 ソフトコミットで対応可能
 solrconfig.xmlで設定する
Elasticsearch
 デフォルトは1秒でrefresh反映される
 30分でflushされる
 各インデックスに対して設定する
どちらも同じようなことはできるが、
Solrは検索パフォーマンス、
Elasticsearchは情報の質、を意識している
拡張性
Solr
 拡張したいインターフェースを実装し、Jarファイ
ルにまとめて配置し、solrconfig.xml等で設定する
 拡張したい部分の機能の知識が必要
Elasticsearch
 プラグインの仕組みにしたがって作成する
 pluginコマンドでインストール
 プラグインの種類
 Analysis, Discovery, River, Transport,
Scripting, Site, Repository, …
Elasticsearchの方が拡張・機能追加がしやすい
バージョン
Solr
 Luceneと一緒にリリースされてくる
 現状に問題がなければ、積極的にバージョンを上
げに行く理由はない (と思う)
Elasticsearch
 月一などのペースでリリースされてくる
 クラスタまわりなど、いろいろと変更が入るため、
できるだけバージョンアップに追随する方が良い
 1.0からローリングアップグレードも可能
しばらくはElasticsearchは積極的に
バージョンを上げた方が良いかも…
将来性
Solr
 検索プラットフォームを目指していく(と思う)
 全文検索観点では今後も開発され、安定した利用
ができる(と思う)
Elasticsearch
 ELKスタック的な感じで波に乗っている
 スケールできる利点で今後も伸びていく(と思う)
 分析やログのストア先として期待できる(と思う)
Luceneベースだし、使い分けではないか…
まとめ
まとめ
 SolrもElasticsearchもLuceneベースであるので、
検索観点で大きく異なる部分は少ない
 全文検索として、信頼性が求めるならSolr
 スケールすることを考えるのであれば、SolrCloud
かElasticsearch
 SolrのスペシャリストがいるならSolrCloudが良い
が、そうでなければElasticsearchで良いと思う
 分析とか、集計情報を扱いたければElasticsearch
 問題に遭遇した時にはElasticsearchの方が解決す
るための難易度が高いと思う
補足
ちょっと宣伝…
 N2SM, Inc.ではFess/Solr/Elasticsearchなどの
検索ソリューションに関する導入・開発支援を
提供しています
http://www.n2sm.net/
Q&A

SolrとElasticsearchを比べてみよう