SolrとElasticsearchを比べてみよう
-
Upload
shinsuke-sugaya -
Category
Technology
-
view
8.085 -
download
6
description
Transcript of SolrとElasticsearchを比べてみよう
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