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

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Recently uploaded (8)

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

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