SolrとElasticsearchを比べてみよう

30
SolrとElasticsearchを比べてみよう Tech Talks

description

SolrとElasticsearchに関して独自の観点で比較してまとめています。 (実際に比較検討が必要な場合は、ご自身で実施されるのが良いと思います)

Transcript of SolrとElasticsearchを比べてみよう

Page 1: SolrとElasticsearchを比べてみよう

SolrとElasticsearchを比べてみよう

Tech Talks

Page 2: SolrとElasticsearchを比べてみよう

名前: 菅谷信介 所属: 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/

自己紹介

Page 3: SolrとElasticsearchを比べてみよう

アジェンダ

Solrとは Elasticsearchとは SolrとElasticsearchの比較 まとめ

Page 4: SolrとElasticsearchを比べてみよう

検索ライブラリ Luceneなど

検索サーバ Solr、Elasticsearch、groongaなど

検索サーバ+クローラ Hyper Estraier、Namazu、Nutchなど

検索システム Fess、商用検索システム(GSAとか)

検索関連のソフトウェア まず、検索業界的な話…

検索関連の知識が必要

検索関連の知識なくても利用可能

Page 5: SolrとElasticsearchを比べてみよう

Apache Solr

Page 6: SolrとElasticsearchを比べてみよう

オープンソースのエンタープライズ検索プラットフォーム 開発元:Apache Software Foundation (2007~) 特徴

高度な全文検索機能 大量のウェブトラフィックに最適化 XML, JSONやHTTPのインターフェース 包括的なHTMLの管理画面 監視用にJMXで利用可能なサーバ統計情報 リニアにスケール可能、自動インデックスレプリケー

ション、自動フェールオーバーと復旧 リアルタイムインデクシング XMLでの柔軟なカスタマイズ性 拡張可能なプラグインアーキテクチャ

Apache Solr http://lucene.apache.org/solr/

Page 7: SolrとElasticsearchを比べてみよう

最近、リリースのペースが速い 全文検索としては実績や信頼性が高い 政治的なところでゴタゴタしている Elasticsearchとの競い合っている気がする SolrCloudはElasticsearchと比べてしまうと作る

のがちょっと面倒 サジェストが日本語環境で使いにくい まるっと全文検索システムがほしいならFessだね

Solrへの個人的な感想

Page 8: SolrとElasticsearchを比べてみよう

Elasticsearch

Page 9: SolrとElasticsearchを比べてみよう

オープンソースの分散リアルタイム検索&分析エンジン 開発元:Elasticsearch (2010~) 特徴

リアルタイムデータが扱える リアルタイム分析 分散環境(スケールできる) 高可用性 マルチテナント 全文検索 ドキュメント志向 衝突管理(楽観的バージョン制御) スキーマフリー RESTful API 操作単位での永続性(トランザクションログ)

Elasticsearch http://www.elasticsearch.org/

Page 10: SolrとElasticsearchを比べてみよう

月一くらいでリリースしてくる Webサイトのドキュメントがわかりにくいので、

情報はググるのが良い スキーマフリーはあまり現実的ではない Elasticsearchの企業としては、かなりの投資され

ている (お金がありそう) LuceneのコミッターがElasticsearchに流れている クラスタを組むのは非常に簡単 プラグインを作れば簡単に拡張ができる 問題に遭遇したら、解決にはそれなりのスキルが

必要…

Elasticsearchへの個人的な感想

Page 11: SolrとElasticsearchを比べてみよう

比較

個人的な観点でまとめる…

Page 12: SolrとElasticsearchを比べてみよう

一応…

世の中には http://solr-vs-elasticsearch.com/ という感じでまとめてくれる人もいるので

細かいことはそのあたりを 見ると良いかも…

Page 13: SolrとElasticsearchを比べてみよう

検索クエリー Solr 「Foo Bar」のようなクエリー文字列

わかりやすいが、複雑なものは微妙かも リクエストパラメータで指定 (ファセット等) Elasticsearch 構造的なクエリーDSL

慣れれば複雑なクエリーも書きやすい RESTfulなAPI Solrな人はquery_stringから使いはじめると良い

かも… Solrは直観的、Elasticsearchは学習コストがあるが

クエリーDSLは慣れれば使いやすい

Page 14: SolrとElasticsearchを比べてみよう

検索クエリー(例) 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 }

Page 15: SolrとElasticsearchを比べてみよう

高度な検索 共通 空間検索、ファセット、類似文書検索、フィルタ

クエリー、ハイライト、スクロール取得、など Solr Results Groupingが可能 (Elasticsearch 1.3で同様のことが可能になるらしい…)

Elasticsearch Percolatorが可能 Aggregationは分析には便利

多少の差はあるが互いに実装される可能性はある

Page 16: SolrとElasticsearchを比べてみよう

API Solr XML, CSV, JSON, バイナリでの応答が可能 クライアントライブラリはSolrJやサードパーティ

製がいろいろある Elasticsearch JSON, YAML, SMILE, バイナリでの応答が可能 バイナリでの通信はTransportClientを利用 クライアントライブラリはサードパーティ製がい

ろいろある

どちらも大差はないが、Elasticsearchの ドキュメント志向の方がわかりやすいかも

Page 17: SolrとElasticsearchを比べてみよう

アーキテクチャ

Solr サーブレットベース solrconfig.xmlで独自にコンポーネント管理 Elasticsearch API等の通信まわりはNettyを利用 Guiceベースのコンポーネント管理

Guiceでコンポーネント管理されているので Elasticsearchの方がコードはすっきりしている

Page 18: SolrとElasticsearchを比べてみよう

インデックス構造

Solr コア単位にドキュメントが保存される SolrCloud コレクション単位にドキュメントが保存される コレクションは複数のシャードで構成される シャードは複数のノードに配置される Elasticsearch インデックス単位にドキュメントが保存される インデックスは複数のシャードで構成される シャードは複数のノードに配置される

Page 19: SolrとElasticsearchを比べてみよう

インデックス構造(図)

Solr SolrCloud/Elasticsearch

Core Shard

Index/Collection

Shard

Shard

Shard

Index/Collection

Cluster

Core

Page 20: SolrとElasticsearchを比べてみよう

スキーマ(データ型) Solr schema.xmlにフィールド型を指定する Solr 4.4からスキーマレスも可能 Elasticsearch 何もしないとスキーマレスで利用可能 typeごとにmappingで指定する

スキーマレスでも利用可能だが きちんと定義して利用するのが安全

Page 21: SolrとElasticsearchを比べてみよう

クラスタ Solr SolrCloudを構築する ZooKeeperでノード管理する Elasticsearch 起動すればクラスタになる ZenDiscoveryでノード管理する ZenDiscovery以外の方法でもノード管理が可能 自動でシャードのリバランスが可能

Elasticsearchは標準でクラスタ構成を 意識しているので、構築が容易

Page 22: SolrとElasticsearchを比べてみよう

分散検索 Solr shardsリクエストパラメータで指定する SolrCloud SolrJのCloudSolrServerを利用する (ZooKeeperを利用) Elasticsearch デフォルトで分散検索 search_typeやpreferenceなどで調整できる

Elasticsearchの方が分散検索の パラメータのチューニングしやすい

Page 23: SolrとElasticsearchを比べてみよう

リアルタイム Solr ソフトコミットで対応可能 solrconfig.xmlで設定する Elasticsearch デフォルトは1秒でrefresh反映される 30分でflushされる 各インデックスに対して設定する

どちらも同じようなことはできるが、 Solrは検索パフォーマンス、

Elasticsearchは情報の質、を意識している

Page 24: SolrとElasticsearchを比べてみよう

拡張性

Solr 拡張したいインターフェースを実装し、Jarファイ

ルにまとめて配置し、solrconfig.xml等で設定する 拡張したい部分の機能の知識が必要 Elasticsearch プラグインの仕組みにしたがって作成する pluginコマンドでインストール プラグインの種類

Analysis, Discovery, River, Transport, Scripting, Site, Repository, …

Elasticsearchの方が拡張・機能追加がしやすい

Page 25: SolrとElasticsearchを比べてみよう

バージョン

Solr Luceneと一緒にリリースされてくる 現状に問題がなければ、積極的にバージョンを上

げに行く理由はない (と思う) Elasticsearch 月一などのペースでリリースされてくる クラスタまわりなど、いろいろと変更が入るため、

できるだけバージョンアップに追随する方が良い 1.0からローリングアップグレードも可能

しばらくはElasticsearchは積極的に バージョンを上げた方が良いかも…

Page 26: SolrとElasticsearchを比べてみよう

将来性

Solr 検索プラットフォームを目指していく(と思う) 全文検索観点では今後も開発され、安定した利用

ができる(と思う)

Elasticsearch ELKスタック的な感じで波に乗っている スケールできる利点で今後も伸びていく(と思う) 分析やログのストア先として期待できる(と思う)

Luceneベースだし、使い分けではないか…

Page 27: SolrとElasticsearchを比べてみよう

まとめ

Page 28: SolrとElasticsearchを比べてみよう

まとめ

SolrもElasticsearchもLuceneベースであるので、検索観点で大きく異なる部分は少ない

全文検索として、信頼性が求めるならSolr スケールすることを考えるのであれば、SolrCloud

かElasticsearch SolrのスペシャリストがいるならSolrCloudが良い

が、そうでなければElasticsearchで良いと思う 分析とか、集計情報を扱いたければElasticsearch 問題に遭遇した時にはElasticsearchの方が解決す

るための難易度が高いと思う

Page 29: SolrとElasticsearchを比べてみよう

補足

ちょっと宣伝…

N2SM, Inc.ではFess/Solr/Elasticsearchなどの

検索ソリューションに関する導入・開発支援を 提供しています

http://www.n2sm.net/

Page 30: SolrとElasticsearchを比べてみよう

Q&A