Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
elasticsearchとSolrの比較                           兼山 元太                          @penguinana_Sunday, December 16, 12
自己紹介                   • 兼山 元太 @penguinana_                   • レシピ検索チーム @ http://cookpad.com/                   • Solr4.0...
Solrのバージョンアップを                           検討しているとき...Sunday, December 16, 12
Elasticsearchも                   調べたほうがいいのでは?Sunday, December 16, 12
• Luceneベース                   • HTTP API                   • 分散検索OK                   • 日本語OKSunday, December 16, 12
• Luceneベース                   • HTTP API 既視感                   • 分散検索OK                   • 日本語OKSunday, December 16, 12
http://solr-vs-elasticsearch.com/Sunday, December 16, 12
感想                   •      機能面で不足はない                   •      APIが開発者にやさしい                   •      容易に習得できる             ...
サンプルを使って                          ひと通り説明しますSunday, December 16, 12
http://blog.livedoor.jp/techblog/archives/65836960.htmlSunday, December 16, 12
livedoorグルメ                   • レストラン情報(21.4万店)                    • 店名、扱っている料理、住所、緯度                          経度、アクセス数、最寄...
livedoorグルメ                   • レビュー情報(20.5万レビュー)                    • 総合評価(5段階)                    • 雰囲気、値段、サービス、味       ...
https://github.com/penguinco/ld_gourmet_searchSunday, December 16, 12
Elasticsearchを使う                   •      1件登録して、1件検索                   •      日本語の扱いを定義                   •      スキーマ定義  ...
PUT                                   index type idcurl -XPUT http://localhost:9200/twitter/tweet/1 -d {  "user": "kimchy"...
PUT                                  index type idcurl -XPUT http://localhost:9200/twitter/user/kimchy -d {  "name" : "Sha...
GET                                               index    type id               curl -XGET http://localhost:9200/twitter/...
SEARCH                                                   index     type id              curl -XGET http://localhost:9200/t...
REST API                   • ドキュメントの追加・削除                   • 設定の追加・削除                   • 全部HTTP APIでできる                 ...
日本語               $ curl -XGET localhost:9200/_analyze?pretty -d               神泉               {                   "token...
日本語                             Analyzerを変更することで対応                                   kuromojiが使えます!                       ...
kuromoji               $ cd elasticsearch               $ bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoj...
add analyzer               $ curl -XPUT localhost:9200/test/ -d                {                   "index":{              ...
kuromoji                $ curl -XGET localhost:9200/test/_analyze?                analyzer=kuromoji_analyzer&pretty -d 神泉 ...
_analyze                $ curl -XGET localhost:9200/test/_analyze?                analyzer=kuromoji_analyzer&pretty -d 関西国...
kuromojiをデフォルトに                   • defaultっていう名前でanalyzerを宣言Sunday, December 16, 12
同義語                   • Solr同様同義語がファイルで書ける                   • +WordNet形式も使えるSunday, December 16, 12
analyzerSunday, December 16, 12
日本語の心配はある程度片付いた!Sunday, December 16, 12
スキーマ定義                   • スキーマフリー!                   • JSONの型が採用される                   • 強制的に定義もできる(mapping)Sunday, Decemb...
mapping例  $ curl -XPUT http://localhost:9200/twitter/tweet/  _mapping -d   {    "tweet" : {      "properties" : {        "...
Solrとの差分                   • SolrのDynamicFieldよりも簡単                   • type                    • 1コア内に複数種類のdocを入れるこ      ...
import(ruby)               ratings = []               CSV.foreach("ratings.csv") do |row|                ratings << {     ...
検索              curl -X GET http://localhost:9200/livedoor_gourmet/              restaurant/_search?pretty -d             ...
Solrとの差分                   • DSLが結構違う                   • filter, facet, grouping, highlightもサポート                   • スコアリン...
スコアリング                   • PV順で並べたらうまくいったw                   • 現実の問題も結構こういうこと多いSunday, December 16, 12
スコアリング                   • 興味のある方はぜひ                   • スクリプト言語で定義できる                   • google: elasticsearch guide sco...
感想                   • 機能面で不足はない                   • APIが開発者にやさしい                   • 容易に習得できる                   • 大規模分散検索...
APISunday, December 16, 12
config                              curlだけでできる                          →アプリケーションに定義を置けるSunday, December 16, 12
コア追加                            curlだけでできる                          →開発者ひとりで完結できるSunday, December 16, 12
容易に習得できる                   • ほとんどの操作はcurlで完結                   • Solrと共通の知識も多い                   • luceneのクエリが使える         ...
分散検索Sunday, December 16, 12
分散検索                   • number_of_shards                   • number_of_replicas                   • replication          ...
multi-tenant                   • open/close index                   • write I/O throttling                   • merge polic...
pluginSunday, December 16, 12
plugin                          $ bin/plugin -install Aconex/elasticsearch-headSunday, December 16, 12
パフォーマンス                   • 事例は多く見つかる                    • foursquare, soundcloud, bugsense ...etc                   • クエリ...
まとめ                   • 分散検索を使うならelasticsearch                   • 分散検索を使わなくても利点が多い                   • 今後使われる機会があるかもSunda...
see also...                   • http://www.elasticsearch.org/                   • http://www.elasticsearch.org/guide/     ...
Upcoming SlideShare
Loading in …5
×

SolrとElasticsearchの比較

17,915 views

Published on

Solr勉強会でelasticsearchの話をした時のコピーです

Published in: Technology
  • Be the first to comment

SolrとElasticsearchの比較

  1. 1. elasticsearchとSolrの比較 兼山 元太 @penguinana_Sunday, December 16, 12
  2. 2. 自己紹介 • 兼山 元太 @penguinana_ • レシピ検索チーム @ http://cookpad.com/ • Solr4.0Sunday, December 16, 12
  3. 3. Solrのバージョンアップを 検討しているとき...Sunday, December 16, 12
  4. 4. Elasticsearchも 調べたほうがいいのでは?Sunday, December 16, 12
  5. 5. • Luceneベース • HTTP API • 分散検索OK • 日本語OKSunday, December 16, 12
  6. 6. • Luceneベース • HTTP API 既視感 • 分散検索OK • 日本語OKSunday, December 16, 12
  7. 7. http://solr-vs-elasticsearch.com/Sunday, December 16, 12
  8. 8. 感想 • 機能面で不足はない • APIが開発者にやさしい • 容易に習得できる • 大規模分散検索以外でも有用 • Solrを使ってなければこっちを本番に使いた い!Sunday, December 16, 12
  9. 9. サンプルを使って ひと通り説明しますSunday, December 16, 12
  10. 10. http://blog.livedoor.jp/techblog/archives/65836960.htmlSunday, December 16, 12
  11. 11. livedoorグルメ • レストラン情報(21.4万店) • 店名、扱っている料理、住所、緯度 経度、アクセス数、最寄り柄行きか らの距離、etc...Sunday, December 16, 12
  12. 12. livedoorグルメ • レビュー情報(20.5万レビュー) • 総合評価(5段階) • 雰囲気、値段、サービス、味 • レビューコメントSunday, December 16, 12
  13. 13. https://github.com/penguinco/ld_gourmet_searchSunday, December 16, 12
  14. 14. Elasticsearchを使う • 1件登録して、1件検索 • 日本語の扱いを定義 • スキーマ定義 • 取り込み • 検索 • スコアリングなどの調整Sunday, December 16, 12
  15. 15. PUT index type idcurl -XPUT http://localhost:9200/twitter/tweet/1 -d { "user": "kimchy", "post_date": "2012-11-26T20:12:00", "message": "Trying out elasticsearch", "score": 5}Sunday, December 16, 12
  16. 16. PUT index type idcurl -XPUT http://localhost:9200/twitter/user/kimchy -d { "name" : "Shay Banon"}Sunday, December 16, 12
  17. 17. GET index type id curl -XGET http://localhost:9200/twitter/tweet/1 { "user": "kimchy", "post_date": "2012-11-26T20:12:00", "message": "Trying out elasticsearch", "score": 5 } }Sunday, December 16, 12
  18. 18. SEARCH index type id curl -XGET http://localhost:9200/twitter/tweet/_search -d { "query" : { "term" : { "user": "kimchy" } } } { "user": "kimchy", "post_date": "2012-11-26T20:12:00", "message": "Trying out elasticsearch", "score": 5 }Sunday, December 16, 12
  19. 19. REST API • ドキュメントの追加・削除 • 設定の追加・削除 • 全部HTTP APIでできる • スキーマフリーSunday, December 16, 12
  20. 20. 日本語 $ curl -XGET localhost:9200/_analyze?pretty -d 神泉 { "tokens" : [ { "token" : "神", "start_offset" : 0, "end_offset" : 1, "type" : "<IDEOGRAPHIC>", "position" : 1 }, { "token" : "泉", "start_offset" : 1, "end_offset" : 2, "type" : "<IDEOGRAPHIC>", "position" : 2 }] }Sunday, December 16, 12
  21. 21. 日本語 Analyzerを変更することで対応 kuromojiが使えます! http://www.hirotakaster.com/archives/2012/11/ elasticsearch-kuromoji-plugin.phpSunday, December 16, 12
  22. 22. kuromoji $ cd elasticsearch $ bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/1.0.0 $ git clone git://github.com/elasticsearch/elasticsearch-analysis- kuromoji.git $ cd elasticsearch-analysis-kuromoji/ $ mvn clean package $ cp target/elasticsearch-analysis-kuromoji-1.2.0-SNAPSHOT.jar ../plugins/ analysis-kuromoji/elasticsearch-analysis-kuromoji-1.0.0.jar # restart elasticsearchSunday, December 16, 12
  23. 23. add analyzer $ curl -XPUT localhost:9200/test/ -d { "index":{ "analysis":{ "tokenizer" : { "kuromoji" : { "type":"kuromoji_tokenizer", "mode":"search" } }, "analyzer" : { "kuromoji_analyzer" : { "type" : "custom", "tokenizer" : "kuromoji_tokenizer" } } } } } ‘Sunday, December 16, 12
  24. 24. kuromoji $ curl -XGET localhost:9200/test/_analyze? analyzer=kuromoji_analyzer&pretty -d 神泉 { "tokens" : [ { "token" : "神泉", "start_offset" : 0, "end_offset" : 2, "type" : "word", "position" : 1 }] }Sunday, December 16, 12
  25. 25. _analyze $ curl -XGET localhost:9200/test/_analyze? analyzer=kuromoji_analyzer&pretty -d 関西国際空港 { "tokens" : [ {"token" : "関西",}, {"token" : "関西国際空港",}, {"token" : "国際",}, {"token" : "空港",} ] }Sunday, December 16, 12
  26. 26. kuromojiをデフォルトに • defaultっていう名前でanalyzerを宣言Sunday, December 16, 12
  27. 27. 同義語 • Solr同様同義語がファイルで書ける • +WordNet形式も使えるSunday, December 16, 12
  28. 28. analyzerSunday, December 16, 12
  29. 29. 日本語の心配はある程度片付いた!Sunday, December 16, 12
  30. 30. スキーマ定義 • スキーマフリー! • JSONの型が採用される • 強制的に定義もできる(mapping)Sunday, December 16, 12
  31. 31. mapping例 $ curl -XPUT http://localhost:9200/twitter/tweet/ _mapping -d { "tweet" : { "properties" : { "message" : {"type" : "string", "store" : "yes"} } } } Sunday, December 16, 12
  32. 32. Solrとの差分 • SolrのDynamicFieldよりも簡単 • type • 1コア内に複数種類のdocを入れるこ とを想定してあって便利Sunday, December 16, 12
  33. 33. import(ruby) ratings = [] CSV.foreach("ratings.csv") do |row| ratings << { :id => row[:id].to_i, :restaurant_id => row[:restaurant_id].to_i, :body => row[:body], :type => rating } end Tire.index livedoor_gourmet do import ratings endSunday, December 16, 12
  34. 34. 検索 curl -X GET http://localhost:9200/livedoor_gourmet/ restaurant/_search?pretty -d { "query":{ "query_string":{ "query":"ラーメン" } }, "sort":[{"access_count":"desc"}], "filter":{ "term":{"closed":"0"} } } Sunday, December 16, 12
  35. 35. Solrとの差分 • DSLが結構違う • filter, facet, grouping, highlightもサポート • スコアリングはスクリプト言語で定義 できるSunday, December 16, 12
  36. 36. スコアリング • PV順で並べたらうまくいったw • 現実の問題も結構こういうこと多いSunday, December 16, 12
  37. 37. スコアリング • 興味のある方はぜひ • スクリプト言語で定義できる • google: elasticsearch guide scoringSunday, December 16, 12
  38. 38. 感想 • 機能面で不足はない • APIが開発者にやさしい • 容易に習得できる • 大規模分散検索以外でも有用Sunday, December 16, 12
  39. 39. APISunday, December 16, 12
  40. 40. config curlだけでできる →アプリケーションに定義を置けるSunday, December 16, 12
  41. 41. コア追加 curlだけでできる →開発者ひとりで完結できるSunday, December 16, 12
  42. 42. 容易に習得できる • ほとんどの操作はcurlで完結 • Solrと共通の知識も多い • luceneのクエリが使える • qury DSLはちょっと障壁…Sunday, December 16, 12
  43. 43. 分散検索Sunday, December 16, 12
  44. 44. 分散検索 • number_of_shards • number_of_replicas • replication • async/sync • write consistency(one, quorum, all)Sunday, December 16, 12
  45. 45. multi-tenant • open/close index • write I/O throttling • merge policy control • shard allocation • number_of_replicas per indexSunday, December 16, 12
  46. 46. pluginSunday, December 16, 12
  47. 47. plugin $ bin/plugin -install Aconex/elasticsearch-headSunday, December 16, 12
  48. 48. パフォーマンス • 事例は多く見つかる • foursquare, soundcloud, bugsense ...etc • クエリキャッシュがない • nginx, varnishなどでキャッシュするSunday, December 16, 12
  49. 49. まとめ • 分散検索を使うならelasticsearch • 分散検索を使わなくても利点が多い • 今後使われる機会があるかもSunday, December 16, 12
  50. 50. see also... • http://www.elasticsearch.org/ • http://www.elasticsearch.org/guide/ • http://solr-vs-elasticsearch.com/ • github.com/elasticsearch • http://blog.sematext.com/ • #elasticsearchSunday, December 16, 12

×