Your SlideShare is downloading. ×
SolrとElasticsearchの比較
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

SolrとElasticsearchの比較

9,126
views

Published on

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

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

Published in: Technology

0 Comments
40 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
9,126
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
44
Comments
0
Likes
40
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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