Submit Search
Upload
MySQLユーザ視点での小さく始めるElasticsearch
•
50 likes
•
16,841 views
Kentaro Yoshida
Follow
第3回Elasticsearch勉強会での発表資料です
Read less
Read more
Technology
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 59
Download now
Download to read offline
Recommended
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
Kentaro Yoshida
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバ
Shinsuke Sugaya
Elasticsearch at CrowdWorks
Elasticsearch at CrowdWorks
佑介 九岡
SolrとElasticsearchの比較
SolrとElasticsearchの比較
genta kaneyama
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
Kentaro Yoshida
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
Shinsuke Sugaya
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステム
Shinsuke Sugaya
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
VirtualTech Japan Inc.
Recommended
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
Kentaro Yoshida
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバ
Shinsuke Sugaya
Elasticsearch at CrowdWorks
Elasticsearch at CrowdWorks
佑介 九岡
SolrとElasticsearchの比較
SolrとElasticsearchの比較
genta kaneyama
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
Kentaro Yoshida
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
Shinsuke Sugaya
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステム
Shinsuke Sugaya
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
VirtualTech Japan Inc.
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
Shinsuke Sugaya
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方
Ryoji Kurosawa
Elasticsearch Authプラグインでアクセスコントロール
Elasticsearch Authプラグインでアクセスコントロール
Shinsuke Sugaya
Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話
ktaro_w
Anemoneによるクローラー入門
Anemoneによるクローラー入門
Tasuku Nakano
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
Naoyuki Yamada
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
Shinsuke Sugaya
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!
Kouhei Sutou
MongoDB World 2014に行ってきた!
MongoDB World 2014に行ってきた!
Tetsutaro Watanabe
45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄
Yukio Saito
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
Naruhiko Ogasawara
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
MongoDB
MongoDB
あしたのオープンソース研究所
elasticsearchプラグイン入門
elasticsearchプラグイン入門
Shinsuke Sugaya
Crawler Commons
Crawler Commons
chibochibo
Elasticsearchベースの全文検索システムFess
Elasticsearchベースの全文検索システムFess
Shinsuke Sugaya
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
Yohei Sasaki
mikasafabric for MySQL
mikasafabric for MySQL
yoku0825
My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話
saiken3110
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
Shinsuke Sugaya
全文検索入門
全文検索入門
antibayesian 俺がS式だ
Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由
Soudai Sone
More Related Content
What's hot
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
Shinsuke Sugaya
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方
Ryoji Kurosawa
Elasticsearch Authプラグインでアクセスコントロール
Elasticsearch Authプラグインでアクセスコントロール
Shinsuke Sugaya
Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話
ktaro_w
Anemoneによるクローラー入門
Anemoneによるクローラー入門
Tasuku Nakano
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
Naoyuki Yamada
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
Shinsuke Sugaya
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!
Kouhei Sutou
MongoDB World 2014に行ってきた!
MongoDB World 2014に行ってきた!
Tetsutaro Watanabe
45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄
Yukio Saito
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
Naruhiko Ogasawara
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
MongoDB
MongoDB
あしたのオープンソース研究所
elasticsearchプラグイン入門
elasticsearchプラグイン入門
Shinsuke Sugaya
Crawler Commons
Crawler Commons
chibochibo
Elasticsearchベースの全文検索システムFess
Elasticsearchベースの全文検索システムFess
Shinsuke Sugaya
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
Yohei Sasaki
mikasafabric for MySQL
mikasafabric for MySQL
yoku0825
My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話
saiken3110
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
Shinsuke Sugaya
What's hot
(20)
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方
Elasticsearch Authプラグインでアクセスコントロール
Elasticsearch Authプラグインでアクセスコントロール
Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話
Anemoneによるクローラー入門
Anemoneによるクローラー入門
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!
MongoDB World 2014に行ってきた!
MongoDB World 2014に行ってきた!
45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
MongoDB
MongoDB
elasticsearchプラグイン入門
elasticsearchプラグイン入門
Crawler Commons
Crawler Commons
Elasticsearchベースの全文検索システムFess
Elasticsearchベースの全文検索システムFess
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
mikasafabric for MySQL
mikasafabric for MySQL
My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
Similar to MySQLユーザ視点での小さく始めるElasticsearch
全文検索入門
全文検索入門
antibayesian 俺がS式だ
Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由
Soudai Sone
20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回
都元ダイスケ Miyamoto
Glass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみた
Satoshi Kubo
JAWS-UG三都物語2014 初心者向け Elasticity ELB/AutoScaling/EIP
JAWS-UG三都物語2014 初心者向け Elasticity ELB/AutoScaling/EIP
Takuro Sasaki
T3 pg sql_tuning_basic_20181122
T3 pg sql_tuning_basic_20181122
Haruka Takatsuka
Pure JavaEE or Spring #glassfishjp
Pure JavaEE or Spring #glassfishjp
Toshiaki Maki
図書館でのSolrの使い方
図書館でのSolrの使い方
Kosuke Tanabe
みんな大好き“全文検索 on AWS”を試してみました!
みんな大好き“全文検索 on AWS”を試してみました!
宗 大栗
JPUG の中国支部長変わったってよ #mysqlbeginner
JPUG の中国支部長変わったってよ #mysqlbeginner
Ikki Takahashi
20120913 nosql@hikarie(okuyama fuse)
20120913 nosql@hikarie(okuyama fuse)
Takahiro Iwase
Glassfishで始める モテる!簡単クラスタ入門
Glassfishで始める モテる!簡単クラスタ入門
Takafumi Yoshida
Spring知っておきたい
Spring知っておきたい
Yuichi Hasegawa
20120418 アジャイルサムライ読書会 第1回
20120418 アジャイルサムライ読書会 第1回
株式会社コネクトスター(ConnectStar Co., Ltd.)
Database smells
Database smells
Mikiya Okuno
Cocoa勉強会関西 #55 MagicalRecordでCore Dataをシンプルにする
Cocoa勉強会関西 #55 MagicalRecordでCore Dataをシンプルにする
asakahara
[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara
[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara
Insight Technology, Inc.
raect.jsを触ったお話
raect.jsを触ったお話
Ryuuichi Iha
TypeScriptをオススメする理由
TypeScriptをオススメする理由
Yusuke Naka
B 2-1 はじめての Windows Azure
B 2-1 はじめての Windows Azure
GoAzure
Similar to MySQLユーザ視点での小さく始めるElasticsearch
(20)
全文検索入門
全文検索入門
Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由
20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回
Glass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみた
JAWS-UG三都物語2014 初心者向け Elasticity ELB/AutoScaling/EIP
JAWS-UG三都物語2014 初心者向け Elasticity ELB/AutoScaling/EIP
T3 pg sql_tuning_basic_20181122
T3 pg sql_tuning_basic_20181122
Pure JavaEE or Spring #glassfishjp
Pure JavaEE or Spring #glassfishjp
図書館でのSolrの使い方
図書館でのSolrの使い方
みんな大好き“全文検索 on AWS”を試してみました!
みんな大好き“全文検索 on AWS”を試してみました!
JPUG の中国支部長変わったってよ #mysqlbeginner
JPUG の中国支部長変わったってよ #mysqlbeginner
20120913 nosql@hikarie(okuyama fuse)
20120913 nosql@hikarie(okuyama fuse)
Glassfishで始める モテる!簡単クラスタ入門
Glassfishで始める モテる!簡単クラスタ入門
Spring知っておきたい
Spring知っておきたい
20120418 アジャイルサムライ読書会 第1回
20120418 アジャイルサムライ読書会 第1回
Database smells
Database smells
Cocoa勉強会関西 #55 MagicalRecordでCore Dataをシンプルにする
Cocoa勉強会関西 #55 MagicalRecordでCore Dataをシンプルにする
[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara
[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara
raect.jsを触ったお話
raect.jsを触ったお話
TypeScriptをオススメする理由
TypeScriptをオススメする理由
B 2-1 はじめての Windows Azure
B 2-1 はじめての Windows Azure
More from Kentaro Yoshida
Improve data engineering work with Digdag and Presto UDF
Improve data engineering work with Digdag and Presto UDF
Kentaro Yoshida
TREASUREDATAのエコシステムで作るロバストなETLデータ処理基盤の作り方
TREASUREDATAのエコシステムで作るロバストなETLデータ処理基盤の作り方
Kentaro Yoshida
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
Kentaro Yoshida
トレジャーデータ 導入体験記 リブセンス編
トレジャーデータ 導入体験記 リブセンス編
Kentaro Yoshida
Hivemallで始める不動産価格推定サービス
Hivemallで始める不動産価格推定サービス
Kentaro Yoshida
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
Kentaro Yoshida
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
Kentaro Yoshida
Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual
Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual
Kentaro Yoshida
MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記
MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記
Kentaro Yoshida
Tritonn (MySQL5.0.87+Senna)からの mroonga (MySQL5.6) 移行体験記
Tritonn (MySQL5.0.87+Senna)からの mroonga (MySQL5.6) 移行体験記
Kentaro Yoshida
MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」
MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」
Kentaro Yoshida
More from Kentaro Yoshida
(11)
Improve data engineering work with Digdag and Presto UDF
Improve data engineering work with Digdag and Presto UDF
TREASUREDATAのエコシステムで作るロバストなETLデータ処理基盤の作り方
TREASUREDATAのエコシステムで作るロバストなETLデータ処理基盤の作り方
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
トレジャーデータ 導入体験記 リブセンス編
トレジャーデータ 導入体験記 リブセンス編
Hivemallで始める不動産価格推定サービス
Hivemallで始める不動産価格推定サービス
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual
Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual
MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記
MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記
Tritonn (MySQL5.0.87+Senna)からの mroonga (MySQL5.6) 移行体験記
Tritonn (MySQL5.0.87+Senna)からの mroonga (MySQL5.6) 移行体験記
MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」
MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」
Recently uploaded
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
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
Toru Tamaki
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
Recently uploaded
(8)
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
MySQLユーザ視点での小さく始めるElasticsearch
1.
07th Feb, 2014 MySQLユーザ視点での 小さく始めるElasticsearch Kentaro Yoshida
in 第3回 Elasticsearch勉強会 page 1
2.
1. はじめに 2. 自己紹介 3.
今回のテーマ 本日の流れ 4. Yamabikoの紹介 5. 検索ことはじめ 6. Elasticsearch雑感 7. まとめ page 2
3.
1. はじめに page 3
4.
こんなお悩みを抱えていませんか? page 4
5.
MySQLを利用している page 5
6.
だけれども、 page 6
7.
検索漏れが少ない日本語全文検索 “Kuromoji”を使いたい! Searchモード・Extendedモードが秀逸 page 7
8.
つまり page 8
9.
“Solr” or “Elasticsearch”
が必要 page 9
10.
APIをRESTfulに扱える “Elasticsearch” がアツい page 10
11.
【課題】 異種RDB間のデータ同期 page 11
12.
2. 自己紹介 page 12
13.
自己紹介 • よしけんさん • (株)リブセンス •
Web系インフラの 研究開発エンジニア • Elasticsearch歴: 2013年 初夏∼ 好きなプロダクト page 13
14.
お知らせ
15.
16.
3.今回のテーマ page 16
17.
今回のテーマ 実データを用いて手軽にElasticsearchと連携した検索を行いたい Elasticsearchをスモールスタートで使い始めたい 既存プログラムの更新系処理に触れずに小さく始めたい メインRDBはMySQLではあるが、検索のみElasticsearchを使う構成 Amazon RDS for
MySQLにも応用できる手離れの良い構成にしたい MySQLサーバの管理無しに冗長化構成を実現できる (Multi-AZ) page 17
18.
MySQLのレコードを Elasticsearchへ同期したい page 18
19.
つまり 異種RDB間のデータ同期 page 19
20.
既存製品はElasticsearch非対応 Attunity Replicate /
Tungsten Replicator page 20
21.
そこに... Riverプラグインを発見 page 21
22.
elasticsearch-river-jdbc 概要 ElasticsearchのRiverプラグインとして動作する JDBCドライバを指定することで各種RDBからレコードを流し込める SQLを一定間隔で実行し、その結果を基に取り込みを行う 実テーブルだけでなくVIEWテーブルからも取り込める page 22
23.
elasticsearch-river-jdbc 不都合な点 動作が安定せずElasticsearchサーバを再起動する必要がある しばらく動いていたがいつの間にか止まっている現象 Elasticsearchサーバ側の役割が増え、単機能ではなくなる 同期する度にElasticsearch側のドキュメントが空になる挙動 page 23
24.
MySQL BinlogAPIが役立つのでは? page 24
25.
試してみたものの・・・ page 25
26.
安定稼働への道が遠く、挫折... page 26
27.
そこで! page 27
28.
欲しいものが無いので作りました page 28
29.
4. Yamabiko page 29
30.
Yamabiko https://github.com/y-ken/yamabiko page 30
31.
Yamabiko 概要 MySQLからElasticsearchへデータを非同期に逐次反映 Amazon RDS・MariaDB・PerconaServer等の互換DBにも対応 Elasticsearchとは別の単体ミドルウェアとして動作 CentOS 6.x向けのRPMパッケージとして配布中 任意のSQL文の結果の差分から、insert/update/deleteイベントを検知 SELECT
* FROM contents WHERE DATE_ADD(updated_at, INTERVAL 5 MINUTE) > NOW(); といったクエリで差分同期も可能 page 31
32.
Yamabiko ユニークな特徴:delete検知が出来る PrimaryKeyのギャップ判定を行うことで実現 行が物理削除されてしまうケースでも追従可能 数十万行単位でも動作します なぜ更新ログ(BinaryLog)ではなくSQLの結果を同期するのか? JOIN無しで検索するnoSQL的概念に対応させるため 非正規化VIEWテーブルを作ることを想定 page 32
33.
Yamabikoシステム構成例 mysql_replicator_multi を利用する場合 Yamabikoが使うメタデータを INSERT/SELECT 格納するためのMySQLを指定 同期情報管理テーブル 全文検索 更新/削除判定用のハッシュテーブル 同期する行数がさほど無ければ データ参照元に相乗りしても良い page 33
34.
5. 検索ことはじめ page 34
35.
データ投入 かねてから無償配布されているライブドアグルメのCSVデータを利用 MySQLをGUI管理できるMacアプリ”Sequel Pro"を用いてDBへ流し込む Yamabikoを利用し、MySQLからデータの同期を始める 登録クエリ:SELECT *
FROM restaurants WHERE closed = 0; 次のトピックは後ほど解説 mapping:緯度経度を扱えるgeo_point型を使うため analyzer:高機能な全文検索を扱えるKuromojiを使うため page 35
36.
page 36
37.
検索クエリ curl -X POST
'http://localhost:9200/livedoor-gourmet/_search?pretty' -d '{ "query":{ "query_string":{ "query":"name:ワイン AND pref_id:13" Luceneクエリで条件指定 } いわゆるWHERE句 }, "sort" : [ 並び替え条件を指定 { "access_count" : "desc" }, ORDER BY access_count DESC ... "fan_count", "_score" ], 範囲選択 LIMIT 0, 10 "from" : 0, "size" : 10 }' page 37
38.
意外と簡単! page 38
39.
緯度経度検索 MySQLでのGeo検索はイケてないのです SPATIALインデックスを使えるのはMyISAMだけ 最近はInnoDBでGeohashを用いればある程度のことは出来る Geohashにも対応しているElasticsearchであれば、Z曲線のグループ毎に facet検索できるので、地域毎に何件ヒットしたかの検索も(多分)可能 MySQL側で緯度と経度が別カラムに格納されているテーブルを Yamabikoを使ってElasticsearchに流し込む場合には、 SELECT文に CONCAT(lat, ",",
lon) AS location という列を追加し、 次ページのmapping定義をすれば緯度経度や近傍検索が出来る page 39
40.
緯度経度検索 # mapping定義を行った後にデータを流し込む $ curl
-XPUT "http://localhost:9200/livedoor/restaurants/_mapping" -d ' { "restaurants" : { "properties" : { "location": { "type": "geo_point", "lat_lon": "true" } } } }' page 40
41.
緯度経度検索 # 検索例 渋谷近辺で店名に「ワイン」を含むお店を10件リストアップします $
curl -XGET "http://localhost:9200/livedoor/restaurants/_search?pretty" -d ' { "query" : { "filtered" : { "query":{ "query_string":{ "query":"name:ワイン" } }, "filter" : { "geo_distance" : { "distance" : "1km", "location" : { "lat" : 35.3924, "lon" : 139.4157 } } } } }, "from" : 0, "size" : 10 }' page 41
42.
意外と簡単! page 42
43.
Mapping 個別指定したい場合には全てのフィールドを定義しなくとも、 個別指定したいカラムのみのmappingをPOSTすることでも動く indexやtypeの動的生成をする場合の注意 フィールドの型を推論してくれるのは便利だが、意図せぬ挙動を 防ぐためにも、実運用時はきちんと定義しておきたい 初回に投入されたドキュメントの内容でカラムが決まるため MySQLと違い、後でMappingの定義の変更は不可 パフォーマンス的観点からも、not_analyzedも含めて指定すると良い デフォルトではString型の文字は全てngramで分解するため page 43
44.
Analyzer Kuromojiの利用方法 環境:Elasticsearch 1.0.0 RC2
RPM 注意点 次のような手順でプラグインをインストール indexを作る前に登録する必要がある(既にある場合は作り直し) プラグインを入れた後はelasticsearchを再起動する $ cd /usr/share/elasticsearch $ sudo ./bin/plugin --install elasticsearch/elasticsearch-analysis-kuromoji/2.0.0.RC1 $ sudo /etc/init.d/elasticsearch restart page 44
45.
Analyzer $ curl -XPUT
'http://localhost:9200/livedoor/' -d' { "index":{ "analysis":{ "tokenizer" : { "kuromoji" : { "type" : "kuromoji_tokenizer", "mode" : "extended" } }, "analyzer" : { "analyzer" : { "type" : "custom", "tokenizer" : "kuromoji" } } } } }' page 45
46.
6. Elasticsearch雑感 page 46
47.
MySQL脳から見たElasticsearch page 47
48.
Elasticsearch ステキな所 MySQL同様にRPMパッケージを利用して手軽に構築できる Solrと異なり、完全RestAPIで操作できる Facet検索は大変便利 配列型はタグ検索にも大変便利 Luceneクエリは学習コストが低く直感的 複数カラムに渡る検索条件を指定しても速い MySQLと異なり1テーブル1インデックスという制約が無いため 複数のソートキーを重み付けしながら使える (boost) 緯度経度周りの検索がMySQLのそれよりも高機能である page
48
49.
Elasticsearch ハマり所 Query DSLは奥が深く実に複雑なため、未だに自在に操れません... mapping定義を更新するためには、index/typeごと消す必要があること 列はinsertAPIやbulkAPIでは自動追加されないため、updateAPIを用いる noSQL的な概念の理解 GROUP
BYに相当する機能は無い GitHubの Field Collapsing/Combining · Issue #256 の今後に期待 MySQLでは正規化さえしておけばSQL言語で自在に扱えるが、JOINが 出来ないElasticsearchでは厳しい。そのため、取り出したい形式に合 わせた非正規化データ構造を入念に準備する必要があること page 49
50.
Elasticsearch ハマり所 noSQL故にJOIN出来ないということは、結果として各typeに同じデータ を複製された状態で持たせることになり、一貫性が失われるという懸念 mappingやデータ登録時の_parentや_childを使うと類似の事は可能 ただし、1:Nとしての紐付け、つまりLEFT JOIN的な事は不可能 こちらのページの「Parent
& child」が分かりやすいのでオススメ Fun with elasticsearch's children and nested documents - Space Vatican http://www.spacevatican.org/2012/6/3/fun-with-elasticsearch-schildren-and-nested-documents/ page 50
51.
7. まとめ page 51
52.
まとめ Elasticsearchの手軽さは革命的 ElasticsearchはKibanaの為だけのプロダクトではない Yamabikoを使えば、並行運用しつつスモールスタートが可能 page 52
53.
お知らせ
54.
お知らせ
55.
56.
57.
58.
Air Intern にてオフィス動画を公開中 http://airintern.com/company/detail/livesense LIVESENSE
made* にてエンジニア求人掲載中 http://made.livesense.co.jp/
59.
Thanks! ご清聴ありがとうございました。 page 59
Download now