Elastic searchとは_エンジニア勉強会20140212

8,692 views

Published on

2月12日に開催されたエスキュービズムエンジニア勉強会で使用した資料になります。

Published in: Technology
0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,692
On SlideShare
0
From Embeds
0
Number of Embeds
1,130
Actions
Shares
0
Downloads
21
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide

Elastic searchとは_エンジニア勉強会20140212

  1. 1. ElasticSearchとは?
  2. 2. OutLine ElasticSearch ElasticSearchとは � さわってみる � キーワード � デモについて解説 � 情報源 �
  3. 3. ElasticSearchとは � elastic � 弾力のある,伸縮自在の � しなやかな. � 〈人・感情など〉不幸があってもすぐ立ち直る,容易に屈し ない; 屈託のない. � 〈規則・考え方など〉融通性のある. � 不可算名詞: ゴムひも,ゴム入り生地 � 可算名詞 《主に米国で用いられる》 輪ゴム. 研究社 新英和中辞典
  4. 4. ElasticSearchとは 【全文検索】機能を、 � 【RESTful】 APIで提供する、 � ソフトウェア(あるいはフレームワーク) � (独断と偏見に基づく)
  5. 5. ElasticSearchとは 全文検索エンジンApache Luceneがベース � RESTful APIで操作 � 分散処理のサポート � � シャーディング、レプリケーション � プラグインによる拡張 � river � analysis 入力系 【構文解析】など
  6. 6. ElasticSearchとは � どこで使われているか � foursquare ...など?
  7. 7. OutLine ElasticSearchとは � さわってみる � キーワード � デモについて解説 � 情報源 �
  8. 8. さわってみる � とりあえずデモ � http://<demo � server ipaddr>/page/ docker run -d otolab/demo20140212-elasticsearch /usr/local/bin/init.sh � 公開予定
  9. 9. さわってみる:デモのコード � 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>
  10. 10. さわってみる:デモのコード � 書き込み $('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)); } ); });
  11. 11. さわってみる:デモのコード � 検索 $('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); } ); });
  12. 12. さわってみる:デモのコード � AJAX部分 function send(method, url, data, success){ $.ajax({ url: url, type: method, dataType: 'json', data: JSON.stringify(data), success: success }); }
  13. 13. さわってみる � 管理プラグイン � HQ � head
  14. 14. OutLine ElasticSearchとは � さわってみる � キーワード � デモについて解説 � 情報源 �
  15. 15. キーワード Apache Lucene � 全文検索 � � 転置インデックス � N-Gram � 形態素解析 REST / RESTful API � NoSQL �
  16. 16. キーワード:Apache Lucene � Apacheのプロジェクトの一つ 全文検索エンジンライブラリ � 100% Pure Java � 1000万ドキュメント程度の規模まで1台で可能 � � 使われているサービス Wikipedia � LinkedIn � EcripseIDE � Apache Solr � � Web検索機能ソフトウェア
  17. 17. キーワード:Apache Lucene 入力の解析、クエリの解析 � 転置インデックスによる検索 � 結果のスコアリング � ...などをサポート 出典:https://www.ibm.com/developerworks/jp/opensource/library/os-apache-lucenesearch/
  18. 18. キーワード:全文検索 � 全文検索 = Full Text Search � 文章等のごく一部を高速に探し出す検索 � 転置インデックス � キーワードがどのデータに属するか?を記録 � データ(文書)からキーワードを抽出する必要がある � (参考)B-Treeインデックス � � 完全一致(と前方一致)がきわめて高速 曖昧な検索には強くない
  19. 19. キーワード:転置インデックス � 文章に単語が含まれる ⇔ 単語が含まれる文章を探す 出典:http://thinkit.co.jp/free/article/0710/17/1/
  20. 20. キーワード:N-gram � N-gram � 決まった文字数で分割を繰り返す 出典:http://handin.sakura.ne.jp/archives/179
  21. 21. キーワード:形態素解析 � 形態素解析 � 日本語の文法構造と辞書などから、単語を分割 (+意味づけ) � 実装としては。。 MeCab系(MeCab、Sen、Chasen、Gosen) � KyTea � Kuromoji �
  22. 22. キーワード:全文検索 � 文章(自然言語)を快適に検索するためには... � TOKENING � � � STEMMING � � Fishing, fished, Fish, Fisher > fish FILTERLING � � , ()など記号での分割、日本語の分かち書き化 N-gram、形態素解析 ストップワード(て、に、を、は、など)、HTMLタグの除去 SCOREING � 順位付けを計算する Luceneはこれらの機構も提供している
  23. 23. キーワード:REST � REST = REpresentational State Transfer � � � � � 2000年にRoy Fielding氏が提唱した、分散システムにおいて複数の ソフトウェアを連携させるのに適した設計原則の集合 「セッションなどの状態管理を行わない(やり取りされる情報 はそれ自体で完結して解釈することができる)」 「情報を操作する命令の体系が予め定義・共有されている」 「すべての情報は汎用的な構文で一意に識別される」 「情報の内部に、別の情報や(その情報の別の)状態へのリ ンクを含めることができる」
  24. 24. キーワード:RESTful API � RESTful API � RESTの考え方で、設計されたAPI � HTTPプロトコルでのAPI通信 アクセスメソッド(PUT/GET/POST/DELETE)でデータ に対する動作(Create / Read / Update / Delete)を指 定 � URLでデータを特定 � リンクとして他の情報を記述 � � 例: � Twitter, Facebookなどの各種API � ログイン、アクセス制限でセッションを使うことが多いので、厳 密ではないが。。
  25. 25. キーワード:NoSQL � Not Only SQL � データベースはSQLだけじゃないぜ。(的なのり) � C10K問題への対応 � クライアント1万台問題(client 10,000)
  26. 26. キーワード: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の一種であると考える向きもある
  27. 27. キーワード:NoSQL � タイプと実装 � Key Value Store � Redis � ...etc � Column Oriented � Cassandra � ...etc � Document Oriented � MongoDB � ...etc � ElasticSearch(?)
  28. 28. OutLine ElasticSearchとは � さわってみる � キーワード � デモについて解説 � 情報源 �
  29. 29. デモについて解説 � 使用プラグイン � elasticsearch-head � elasticsearch-HQ � elasticsearch-analysis-kuromoji
  30. 30. デモについて解説: elasticsearch � 本体 � Dockerで入れました。 � 使用方法 � デプロイ docker pull reoring/docker-elasticsearch docker run -p 9200:9200 reoring/dockerelasticsearch � 今回は、nginxなどと動作するように調整
  31. 31. デモについて解説: elasticsearch-head � 管理インターフェイスを提供するプラグイン � 使用方法 � プラグインインストール ./bin/plugin -i mobz/elasticsearch-head � アクセス http://localhost:9200/_plugin/head/
  32. 32. デモについて解説: elasticsearch-HQ � 管理インターフェイスを提供するプラグイン � 使用方法 � プラグインインストール ./bin/plugin -i royrusso/elasticsearch-HQ � アクセス http://localhost:9200/_plugin/HQ/
  33. 33. デモについて解説: 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以下のデータのデフォルトの解析器として利用される
  34. 34. デモについて解説: その他 � 入れたかったもの � Kibanaやfluentdとの連動 � River系のプラグイン � elasticsearch-river-mongo � elasticsearch-river-rdbc � elasticsearch-river-fluentd まにあいませんでした。m(_ _)m
  35. 35. OutLine ElasticSearchとは � さわってみる � キーワード � デモについて解説 � 情報源 �
  36. 36. 情報源 � 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
  37. 37. おわり � ご清聴ありがとうございます。

×