SlideShare a Scribd company logo
1 of 50
Download to read offline
elasticsearchとSolrの比較
                           兼山 元太
                          @penguinana_




Sunday, December 16, 12
自己紹介

                   • 兼山 元太 @penguinana_
                   • レシピ検索チーム @ http://cookpad.com/
                   • Solr4.0


Sunday, December 16, 12
Solrのバージョンアップを
                           検討しているとき...




Sunday, December 16, 12
Elasticsearchも
                   調べたほうがいいのでは?




Sunday, December 16, 12
• Luceneベース
                   • HTTP API
                   • 分散検索OK
                   • 日本語OK

Sunday, December 16, 12
• Luceneベース
                   • HTTP API 既視感
                   • 分散検索OK
                   • 日本語OK

Sunday, December 16, 12
http://solr-vs-elasticsearch.com/




Sunday, December 16, 12
感想
                   •      機能面で不足はない

                   •      APIが開発者にやさしい

                   •      容易に習得できる

                   •      大規模分散検索以外でも有用

                   •      Solrを使ってなければこっちを本番に使いた
                          い!


Sunday, December 16, 12
サンプルを使って
                          ひと通り説明します




Sunday, December 16, 12
http://blog.livedoor.jp/techblog/archives/65836960.html


Sunday, December 16, 12
livedoorグルメ

                   • レストラン情報(21.4万店)
                    • 店名、扱っている料理、住所、緯度
                          経度、アクセス数、最寄り柄行きか
                          らの距離、etc...



Sunday, December 16, 12
livedoorグルメ

                   • レビュー情報(20.5万レビュー)
                    • 総合評価(5段階)
                    • 雰囲気、値段、サービス、味
                    • レビューコメント

Sunday, December 16, 12
https://github.com/penguinco/ld_gourmet_search

Sunday, December 16, 12
Elasticsearchを使う
                   •      1件登録して、1件検索

                   •      日本語の扱いを定義

                   •      スキーマ定義

                   •      取り込み

                   •      検索

                   •      スコアリングなどの調整


Sunday, December 16, 12
PUT
                                   index type id
curl -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
PUT
                                  index type id
curl -XPUT http://localhost:9200/twitter/user/kimchy -d '
{
  "name" : "Shay Banon"
}
'




Sunday, December 16, 12
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
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
REST API

                   • ドキュメントの追加・削除
                   • 設定の追加・削除
                   • 全部HTTP APIでできる
                   • スキーマフリー

Sunday, December 16, 12
日本語
               $ 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
日本語

                             Analyzerを変更することで対応

                                   kuromojiが使えます!

                          http://www.hirotakaster.com/archives/2012/11/
                                 elasticsearch-kuromoji-plugin.php




Sunday, December 16, 12
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 elasticsearch




Sunday, December 16, 12
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
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
_analyze
                $ curl -XGET 'localhost:9200/test/_analyze?
                analyzer=kuromoji_analyzer&pretty' -d '関西国際空港'
                {
                    "tokens" : [
                      {"token" : "関西",},
                          {"token" : "関西国際空港",},
                          {"token" : "国際",},
                          {"token" : "空港",}
                    ]
                }
Sunday, December 16, 12
kuromojiをデフォルトに



                   • defaultっていう名前でanalyzerを宣言



Sunday, December 16, 12
同義語


                   • Solr同様同義語がファイルで書ける
                   • +WordNet形式も使える


Sunday, December 16, 12
analyzer




Sunday, December 16, 12
日本語の心配はある程度片付いた!




Sunday, December 16, 12
スキーマ定義

                   • スキーマフリー!
                   • JSONの型が採用される
                   • 強制的に定義もできる(mapping)


Sunday, December 16, 12
mapping例
  $ curl -XPUT 'http://localhost:9200/twitter/tweet/
  _mapping' -d '
  {
    "tweet" : {
      "properties" : {
        "message" : {"type" : "string", "store" : "yes"}
      }
    }
  }
  '

Sunday, December 16, 12
Solrとの差分

                   • SolrのDynamicFieldよりも簡単
                   • type
                    • 1コア内に複数種類のdocを入れるこ
                          とを想定してあって便利



Sunday, December 16, 12
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
               end

Sunday, December 16, 12
検索
              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
Solrとの差分

                   • DSLが結構違う
                   • filter, facet, grouping, highlightもサポート
                   • スコアリングはスクリプト言語で定義
                          できる



Sunday, December 16, 12
スコアリング


                   • PV順で並べたらうまくいったw
                   • 現実の問題も結構こういうこと多い


Sunday, December 16, 12
スコアリング

                   • 興味のある方はぜひ
                   • スクリプト言語で定義できる
                   • google: elasticsearch guide scoring


Sunday, December 16, 12
感想

                   • 機能面で不足はない
                   • APIが開発者にやさしい
                   • 容易に習得できる
                   • 大規模分散検索以外でも有用

Sunday, December 16, 12
API



Sunday, December 16, 12
config

                              curlだけでできる
                          →アプリケーションに定義を置ける




Sunday, December 16, 12
コア追加

                            curlだけでできる
                          →開発者ひとりで完結できる




Sunday, December 16, 12
容易に習得できる

                   • ほとんどの操作はcurlで完結
                   • Solrと共通の知識も多い
                   • luceneのクエリが使える
                   • qury DSLはちょっと障壁…

Sunday, December 16, 12
分散検索



Sunday, December 16, 12
分散検索

                   • number_of_shards
                   • number_of_replicas
                   • replication
                    • async/sync
                    • write consistency(one, quorum, all)

Sunday, December 16, 12
multi-tenant

                   • open/close index
                   • write I/O throttling
                   • merge policy control
                   • shard allocation
                   • number_of_replicas per index

Sunday, December 16, 12
plugin




Sunday, December 16, 12
plugin


                          $ bin/plugin -install Aconex/elasticsearch-head




Sunday, December 16, 12
パフォーマンス
                   • 事例は多く見つかる
                    • foursquare, soundcloud, bugsense ...etc

                   • クエリキャッシュがない
                    • nginx, varnishなどでキャッシュする

Sunday, December 16, 12
まとめ

                   • 分散検索を使うならelasticsearch
                   • 分散検索を使わなくても利点が多い
                   • 今後使われる機会があるかも


Sunday, December 16, 12
see also...
                   • http://www.elasticsearch.org/
                   • http://www.elasticsearch.org/guide/
                   • http://solr-vs-elasticsearch.com/
                   • github.com/elasticsearch
                   • http://blog.sematext.com/
                   • #elasticsearch
Sunday, December 16, 12

More Related Content

What's hot

データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Shinsuke Sugaya
 
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回Naoyuki Yamada
 
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発Shinsuke Sugaya
 
Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話ktaro_w
 
Reladomo入門 JJUGナイトセミナー #jjug
Reladomo入門 JJUGナイトセミナー #jjugReladomo入門 JJUGナイトセミナー #jjug
Reladomo入門 JJUGナイトセミナー #jjugHiroshi Ito
 
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリAndroidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリYukiya Nakagawa
 
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Ryoji Kurosawa
 
Integrating elasticsearch with asp dot net core
Integrating elasticsearch with asp dot net coreIntegrating elasticsearch with asp dot net core
Integrating elasticsearch with asp dot net coreShotaro Suzuki
 
Paging Libraryの基本的な使い方について
Paging Libraryの基本的な使い方についてPaging Libraryの基本的な使い方について
Paging Libraryの基本的な使い方についてichirokato5
 
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale DatasetsCAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale DatasetsNaoyuki Yamada
 
SPARQLアプリケーション開発
SPARQLアプリケーション開発SPARQLアプリケーション開発
SPARQLアプリケーション開発Toshiaki Katayama
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようShinsuke Sugaya
 
グラフタイプデータの可視化ツールーTom Sawyer
グラフタイプデータの可視化ツールーTom Sawyerグラフタイプデータの可視化ツールーTom Sawyer
グラフタイプデータの可視化ツールーTom SawyerChanghwan Lee
 
MongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキストMongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキストAkihiro Kuwano
 
Realm platform2019
Realm platform2019Realm platform2019
Realm platform2019昌桓 李
 
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQLハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQLTaisuke Fukuno
 
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜Naruhiko Ogasawara
 

What's hot (20)

Elasticsearch at Makuake
Elasticsearch at MakuakeElasticsearch at Makuake
Elasticsearch at Makuake
 
d3sparql.js
d3sparql.js d3sparql.js
d3sparql.js
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
 
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
 
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
 
Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話
 
Reladomo入門 JJUGナイトセミナー #jjug
Reladomo入門 JJUGナイトセミナー #jjugReladomo入門 JJUGナイトセミナー #jjug
Reladomo入門 JJUGナイトセミナー #jjug
 
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリAndroidで使えるJSON-Javaライブラリ
Androidで使えるJSON-Javaライブラリ
 
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方
 
Integrating elasticsearch with asp dot net core
Integrating elasticsearch with asp dot net coreIntegrating elasticsearch with asp dot net core
Integrating elasticsearch with asp dot net core
 
Paging Libraryの基本的な使い方について
Paging Libraryの基本的な使い方についてPaging Libraryの基本的な使い方について
Paging Libraryの基本的な使い方について
 
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale DatasetsCAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
 
SPARQLアプリケーション開発
SPARQLアプリケーション開発SPARQLアプリケーション開発
SPARQLアプリケーション開発
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
 
グラフタイプデータの可視化ツールーTom Sawyer
グラフタイプデータの可視化ツールーTom Sawyerグラフタイプデータの可視化ツールーTom Sawyer
グラフタイプデータの可視化ツールーTom Sawyer
 
MongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキストMongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキスト
 
Realm platform2019
Realm platform2019Realm platform2019
Realm platform2019
 
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQLハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
 
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
 

Similar to SolrとElasticsearchの比較

Rとcdisc@moss10 公開用
Rとcdisc@moss10 公開用Rとcdisc@moss10 公開用
Rとcdisc@moss10 公開用Masafumi Okada
 
Movable Type 6 Overview - New York Perl Mongers Tech Talk
Movable Type 6 Overview - New York Perl Mongers Tech TalkMovable Type 6 Overview - New York Perl Mongers Tech Talk
Movable Type 6 Overview - New York Perl Mongers Tech TalkYuji Takayama
 
SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回
SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回
SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回yamahige
 
XHR2 Wonder Land
XHR2 Wonder LandXHR2 Wonder Land
XHR2 Wonder Landykhs
 
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月VirtualTech Japan Inc.
 
AWS SDK for Smalltalk
AWS SDK for SmalltalkAWS SDK for Smalltalk
AWS SDK for SmalltalkSho Yoshida
 
20121116 k lab_html5イベント
20121116 k lab_html5イベント20121116 k lab_html5イベント
20121116 k lab_html5イベントklab-nagai-k
 
ウェブから情報をあつめる
ウェブから情報をあつめるウェブから情報をあつめる
ウェブから情報をあつめるShuhei Iitsuka
 
Redis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo SpringRedis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo SpringMakoto Ohnami
 
「ほげエンジニア」の定義について #operationcasual
「ほげエンジニア」の定義について #operationcasual「ほげエンジニア」の定義について #operationcasual
「ほげエンジニア」の定義について #operationcasualSATOSHI TAGOMORI
 
OpenStack + Common Lisp
OpenStack + Common LispOpenStack + Common Lisp
OpenStack + Common Lispirix_jp
 

Similar to SolrとElasticsearchの比較 (11)

Rとcdisc@moss10 公開用
Rとcdisc@moss10 公開用Rとcdisc@moss10 公開用
Rとcdisc@moss10 公開用
 
Movable Type 6 Overview - New York Perl Mongers Tech Talk
Movable Type 6 Overview - New York Perl Mongers Tech TalkMovable Type 6 Overview - New York Perl Mongers Tech Talk
Movable Type 6 Overview - New York Perl Mongers Tech Talk
 
SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回
SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回
SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回
 
XHR2 Wonder Land
XHR2 Wonder LandXHR2 Wonder Land
XHR2 Wonder Land
 
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
 
AWS SDK for Smalltalk
AWS SDK for SmalltalkAWS SDK for Smalltalk
AWS SDK for Smalltalk
 
20121116 k lab_html5イベント
20121116 k lab_html5イベント20121116 k lab_html5イベント
20121116 k lab_html5イベント
 
ウェブから情報をあつめる
ウェブから情報をあつめるウェブから情報をあつめる
ウェブから情報をあつめる
 
Redis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo SpringRedis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo Spring
 
「ほげエンジニア」の定義について #operationcasual
「ほげエンジニア」の定義について #operationcasual「ほげエンジニア」の定義について #operationcasual
「ほげエンジニア」の定義について #operationcasual
 
OpenStack + Common Lisp
OpenStack + Common LispOpenStack + Common Lisp
OpenStack + Common Lisp
 

More from genta kaneyama

ニコニコ動画を検索可能にしてみよう
ニコニコ動画を検索可能にしてみようニコニコ動画を検索可能にしてみよう
ニコニコ動画を検索可能にしてみようgenta kaneyama
 
Solrを使ったレシピ検索のプロトタイピング
Solrを使ったレシピ検索のプロトタイピングSolrを使ったレシピ検索のプロトタイピング
Solrを使ったレシピ検索のプロトタイピングgenta kaneyama
 
Tokyotextmining#1 kaneyama genta
Tokyotextmining#1 kaneyama gentaTokyotextmining#1 kaneyama genta
Tokyotextmining#1 kaneyama gentagenta kaneyama
 
solr@twitter検索2010
solr@twitter検索2010solr@twitter検索2010
solr@twitter検索2010genta kaneyama
 

More from genta kaneyama (6)

ニコニコ動画を検索可能にしてみよう
ニコニコ動画を検索可能にしてみようニコニコ動画を検索可能にしてみよう
ニコニコ動画を検索可能にしてみよう
 
Solrを使ったレシピ検索のプロトタイピング
Solrを使ったレシピ検索のプロトタイピングSolrを使ったレシピ検索のプロトタイピング
Solrを使ったレシピ検索のプロトタイピング
 
Solr at cookpad
Solr at cookpadSolr at cookpad
Solr at cookpad
 
Tokyotextmining#1 kaneyama genta
Tokyotextmining#1 kaneyama gentaTokyotextmining#1 kaneyama genta
Tokyotextmining#1 kaneyama genta
 
solr@twitter検索2010
solr@twitter検索2010solr@twitter検索2010
solr@twitter検索2010
 
Solr@twitter検索
Solr@twitter検索Solr@twitter検索
Solr@twitter検索
 

Recently uploaded

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Recently uploaded (10)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

SolrとElasticsearchの比較

  • 1. elasticsearchとSolrの比較 兼山 元太 @penguinana_ Sunday, December 16, 12
  • 2. 自己紹介 • 兼山 元太 @penguinana_ • レシピ検索チーム @ http://cookpad.com/ • Solr4.0 Sunday, December 16, 12
  • 3. Solrのバージョンアップを 検討しているとき... Sunday, December 16, 12
  • 4. Elasticsearchも 調べたほうがいいのでは? Sunday, December 16, 12
  • 5. • Luceneベース • HTTP API • 分散検索OK • 日本語OK Sunday, December 16, 12
  • 6. • Luceneベース • HTTP API 既視感 • 分散検索OK • 日本語OK Sunday, December 16, 12
  • 8. 感想 • 機能面で不足はない • APIが開発者にやさしい • 容易に習得できる • 大規模分散検索以外でも有用 • Solrを使ってなければこっちを本番に使いた い! Sunday, December 16, 12
  • 9. サンプルを使って ひと通り説明します Sunday, December 16, 12
  • 11. livedoorグルメ • レストラン情報(21.4万店) • 店名、扱っている料理、住所、緯度 経度、アクセス数、最寄り柄行きか らの距離、etc... Sunday, December 16, 12
  • 12. livedoorグルメ • レビュー情報(20.5万レビュー) • 総合評価(5段階) • 雰囲気、値段、サービス、味 • レビューコメント Sunday, December 16, 12
  • 14. Elasticsearchを使う • 1件登録して、1件検索 • 日本語の扱いを定義 • スキーマ定義 • 取り込み • 検索 • スコアリングなどの調整 Sunday, December 16, 12
  • 15. PUT index type id curl -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 id curl -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.php Sunday, 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 elasticsearch Sunday, 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
  • 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 end Sunday, 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 scoring Sunday, December 16, 12
  • 38. 感想 • 機能面で不足はない • APIが開発者にやさしい • 容易に習得できる • 大規模分散検索以外でも有用 Sunday, 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
  • 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 index Sunday, December 16, 12
  • 47. plugin $ bin/plugin -install Aconex/elasticsearch-head Sunday, 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/ • #elasticsearch Sunday, December 16, 12