elastic searchとは_エンジニア勉強会20140212
DESCRIPTION
2月12日に開催されたエスキュービズムエンジニア勉強会で使用した資料になります。TRANSCRIPT
![Page 1: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/1.jpg)
ElasticSearchとは?
![Page 2: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/2.jpg)
OutLine
� ElasticSearchElasticSearchElasticSearchElasticSearchとは
� さわってみる
�キーワード
�デモについて解説
�情報源
![Page 3: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/3.jpg)
ElasticSearchとは
� elastic�弾力のある,伸縮自在の�しなやかな.� 〈人・感情など〉不幸があってもすぐ立ち直る,容易に屈しない; 屈託のない.
� 〈規則・考え方など〉融通性のある.�不可算名詞: ゴムひも,ゴム入り生地�可算名詞 《主に米国で用いられる》 輪ゴム.
研究社 新英和中辞典
![Page 4: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/4.jpg)
ElasticSearchとは
� 【全文検索】機能を、
� 【RESTful】 APIで提供する、
� ソフトウェア(あるいはフレームワーク)
(独断と偏見に基づく)
![Page 5: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/5.jpg)
ElasticSearchとは
�全文検索エンジンApache Luceneがベース
� RESTful APIで操作
�分散処理のサポート
�シャーディング、レプリケーション
� プラグインによる拡張
�river 入力系
�analysis 【構文解析】など
![Page 6: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/6.jpg)
ElasticSearchとは
� どこで使われているか
� foursquare
...など?
![Page 7: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/7.jpg)
OutLine
� ElasticSearchとは
� さわってみる
�キーワード
�デモについて解説
�情報源
![Page 8: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/8.jpg)
さわってみる
� とりあえずデモ
�http://<demo server ipaddr>/page/
� docker run -d otolab/demo20140212-elasticsearch /usr/local/bin/init.sh
� 公開予定
![Page 9: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/9.jpg)
さわってみる:デモのコード
� HTMLの構造 <form id="search"> <input name="query" /> <input type="submit" /> </form>
<form id="put"> <select name="user"> <option>otoan</option><option>naoto kato</option> </select> <textarea name="message" value=""></textarea> <input name="user" type="hidden" value="otoan" /> <input type="submit" /> </form>
![Page 10: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/10.jpg)
さわってみる:デモのコード
� 書き込み $('form#put').on('submit', function(e){ e.preventDefault(); var $this = $(this); var data = { postDate: (new Date()).toISOString(), user: $this.find('[name=user]').val(), message: $this.find('[name=message]').val() }; send('PUT', '/twitter/tweet/'+uuid(), data, function(data, dataType){ print(JSON.stringify(data)); } ); });
![Page 11: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/11.jpg)
さわってみる:デモのコード
� 検索 $('form#search').on('submit', function(e){ e.preventDefault(); var query = { "query": { "text": { "message": $(this).find('[name=query]').val() } } }; send('POST', '/twitter/tweet/_search', query, function(data){ if (data.hits) print_hits(data.hits); } ); });
![Page 12: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/12.jpg)
さわってみる:デモのコード
� AJAX部分 function send(method, url, data, success){ $.ajax({ url: url, type: method, dataType: 'json', data: JSON.stringify(data), success: success }); }
![Page 13: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/13.jpg)
さわってみる
�管理プラグイン
�HQ�head
![Page 14: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/14.jpg)
OutLine
� ElasticSearchとは
� さわってみる
�キーワード
�デモについて解説
�情報源
![Page 15: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/15.jpg)
キーワード
� Apache Lucene�全文検索
�転置インデックス
�N-Gram�形態素解析
� REST / RESTful API� NoSQL
![Page 16: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/16.jpg)
キーワード:Apache Lucene
� Apacheのプロジェクトの一つ� 全文検索エンジンライブラリ
� 100% Pure Java� 1000万ドキュメント程度の規模まで1台で可能
� 使われているサービス� Wikipedia� LinkedIn� EcripseIDE� Apache Solr
� Web検索機能ソフトウェア
![Page 17: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/17.jpg)
キーワード:Apache Lucene
�入力の解析、クエリの解析
�転置インデックスによる検索
�結果のスコアリング
...などをサポート
出典:https://www.ibm.com/developerworks/jp/opensource/library/os-apache-lucenesearch/
![Page 18: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/18.jpg)
キーワード:全文検索
� 全文検索 = Full Text Search�文章等のごく一部を高速に探し出す検索
� 転置インデックス�キーワードがどのデータに属するか?を記録�データ(文書)からキーワードを抽出する必要がある
� (参考)B-Treeインデックス� 完全一致(と前方一致)がきわめて高速� 曖昧な検索には強くない
![Page 19: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/19.jpg)
キーワード:転置インデックス
�文章に単語が含まれる
⇔ 単語が含まれる文章を探す
出典:http://thinkit.co.jp/free/article/0710/17/1/
![Page 20: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/20.jpg)
キーワード:N-gram
� N-gram�決まった文字数で分割を繰り返す
出典:http://handin.sakura.ne.jp/archives/179
![Page 21: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/21.jpg)
キーワード:形態素解析
�形態素解析
�日本語の文法構造と辞書などから、単語を分割(+意味づけ)
�実装としては。。� MeCab系(MeCab、Sen、Chasen、Gosen)� KyTea� Kuromoji
![Page 22: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/22.jpg)
キーワード:全文検索
� 文章(自然言語)を快適に検索するためには...� TOKENING
� , ()など記号での分割、日本語の分かち書き化
� N-gram、形態素解析
� STEMMING� Fishing, fished, Fish, Fisher > fish
� FILTERLING� ストップワード(て、に、を、は、など)、HTMLタグの除去
� SCOREING� 順位付けを計算する
Luceneはこれらの機構も提供している
![Page 23: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/23.jpg)
キーワード:REST
� REST = REpresentational State Transfer� 2000年にRoy Fielding氏が提唱した、分散システムにおいて複数の
ソフトウェアを連携させるのに適した設計原則の集合
� 「セッションなどの状態管理を行わない(やり取りされる情報はそれ自体で完結して解釈することができる)」
� 「情報を操作する命令の体系が予め定義・共有されている」
� 「すべての情報は汎用的な構文で一意に識別される」
� 「情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることができる」
![Page 24: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/24.jpg)
キーワード:RESTful API
� RESTful API�RESTの考え方で、設計されたAPI�HTTPプロトコルでのAPI通信
� アクセスメソッド(PUT/GET/POST/DELETE)でデータに対する動作(Create / Read / Update / Delete)を指定
� URLでデータを特定� リンクとして他の情報を記述
�例:� Twitter, Facebookなどの各種API
� ログイン、アクセス制限でセッションを使うことが多いので、厳密ではないが。。
![Page 25: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/25.jpg)
キーワード:NoSQL
� Not Only SQL�データベースはSQLだけじゃないぜ。(的なのり)
� C10K問題への対応
�クライアント1万台問題(client 10,000)
![Page 26: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/26.jpg)
キーワード:NoSQL� リレーショナルDB (SQLのデータベース)
� 理論的に整理され高性能� 分散処理しづらい
� 明確な定義はないが、おおむね下記を備えたデータベース� 「“Next Generation Databases mostly addressing some of the
points: being non-relational, distributed, open-source and horizontally scalable.”」
(Elasticsearch as a NoSQL Database)
� 非リレーショナル、分散、オープンソース、水平スケール
� ElasticSearchもNoSQLの一種であると考える向きもある
![Page 27: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/27.jpg)
キーワード:NoSQL
� タイプと実装� Key Value Store
� Redis� ...etc
� Column Oriented� Cassandra� ...etc
� Document Oriented� MongoDB� ...etc� ElasticSearch(?)
![Page 28: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/28.jpg)
OutLine
� ElasticSearchとは
� さわってみる
�キーワード
�デモについて解説
�情報源
![Page 29: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/29.jpg)
デモについて解説
�使用プラグイン
�elasticsearch-head�elasticsearch-HQ�elasticsearch-analysis-kuromoji
![Page 30: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/30.jpg)
デモについて解説:elasticsearch
�本体
�Dockerで入れました。
�使用方法
�デプロイdocker pull reoring/docker-elasticsearchdocker run -p 9200:9200 reoring/docker-
elasticsearch� 今回は、nginxなどと動作するように調整
![Page 31: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/31.jpg)
デモについて解説:elasticsearch-head�管理インターフェイスを提供するプラグイン
�使用方法
�プラグインインストール./bin/plugin -i mobz/elasticsearch-head
�アクセスhttp://localhost:9200/_plugin/head/
![Page 32: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/32.jpg)
デモについて解説:elasticsearch-HQ�管理インターフェイスを提供するプラグイン
�使用方法
�プラグインインストール./bin/plugin -i royrusso/elasticsearch-HQ
�アクセスhttp://localhost:9200/_plugin/HQ/
![Page 33: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/33.jpg)
デモについて解説:elasticsearch-analysis-kuromoji� 日本語構文解析のプラグイン
� 使用方法� インストール
./bin/plugin -i elasticsearch/elasticsearch-analysis-kuromoji/1.7.0� 設定
curl -XPUT 'localhost:9200/twitter' -d '{ "settings": { "analysis": { "analyzer": { "default" : { "type" : "kuromoji" } } } }}'
� twitter以下のデータのデフォルトの解析器として利用される
![Page 34: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/34.jpg)
デモについて解説:その他
� 入れたかったもの� Kibanaやfluentdとの連動� River系のプラグイン
� elasticsearch-river-mongo� elasticsearch-river-rdbc� elasticsearch-river-fluentd
まにあいませんでした。m(_ _)m
![Page 35: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/35.jpg)
OutLine
� ElasticSearchとは
� さわってみる
�キーワード
�デモについて解説
�情報源
![Page 36: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/36.jpg)
情報源
� elasticsearchを紹介している記事を紹介� チュートリアル
� Elasticsearchチュートリアル� http://code46.hatenablog.com/entry/2014/01/21/115620
� fluentd + kibana� ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ� http://www.slideshare.net/y-ken/elasticsearch-kibnana-fluentd-management-tips
� river-wikipedia� ElasticSearchにプラグインで日本語Wikipediaデータを入れてみました � http://blog.johtani.info/blog/2013/08/23/index-wikipedia-ja-to-elasticsearch/
� river-rdbc + kibana� ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ� http://www.slideshare.net/y-ken/elasticsearch-kibnana-fluentd-management-tips
� river-mongodb� ElasticSearch + MongoDBをNode.jsで操作する � http://nextdeveloper.hatenablog.com/entry/2014/01/08/120203
![Page 37: Elastic searchとは_エンジニア勉強会20140212](https://reader034.vdocuments.net/reader034/viewer/2022052506/557cf234d8b42a57118b4629/html5/thumbnails/37.jpg)
おわり
� ご清聴ありがとうございます。