37
ElasticSearchとは?

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

  • Upload
    -

  • View
    3.261

  • Download
    2

Embed Size (px)

DESCRIPTION

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

Citation preview

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

ElasticSearchとは?

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

OutLine

� ElasticSearchElasticSearchElasticSearchElasticSearchとは

� さわってみる

�キーワード

�デモについて解説

�情報源

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

ElasticSearchとは

� elastic�弾力のある,伸縮自在の�しなやかな.� 〈人・感情など〉不幸があってもすぐ立ち直る,容易に屈しない; 屈託のない.

� 〈規則・考え方など〉融通性のある.�不可算名詞: ゴムひも,ゴム入り生地�可算名詞 《主に米国で用いられる》 輪ゴム.

研究社 新英和中辞典

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

ElasticSearchとは

� 【全文検索】機能を、

� 【RESTful】 APIで提供する、

� ソフトウェア(あるいはフレームワーク)

(独断と偏見に基づく)

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

ElasticSearchとは

�全文検索エンジンApache Luceneがベース

� RESTful APIで操作

�分散処理のサポート

�シャーディング、レプリケーション

� プラグインによる拡張

�river 入力系

�analysis 【構文解析】など

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

ElasticSearchとは

� どこで使われているか

� foursquare

...など?

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

OutLine

� ElasticSearchとは

� さわってみる

�キーワード

�デモについて解説

�情報源

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

さわってみる

� とりあえずデモ

�http://<demo server ipaddr>/page/

� docker run -d otolab/demo20140212-elasticsearch /usr/local/bin/init.sh

� 公開予定

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

さわってみる:デモのコード

� 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

さわってみる:デモのコード

� 書き込み $('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

さわってみる:デモのコード

� 検索 $('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

さわってみる:デモのコード

� 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

さわってみる

�管理プラグイン

�HQ�head

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

OutLine

� ElasticSearchとは

� さわってみる

�キーワード

�デモについて解説

�情報源

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

キーワード

� Apache Lucene�全文検索

�転置インデックス

�N-Gram�形態素解析

� REST / RESTful API� NoSQL

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

キーワード:Apache Lucene

� Apacheのプロジェクトの一つ� 全文検索エンジンライブラリ

� 100% Pure Java� 1000万ドキュメント程度の規模まで1台で可能

� 使われているサービス� Wikipedia� LinkedIn� EcripseIDE� Apache Solr

� Web検索機能ソフトウェア

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

キーワード:Apache Lucene

�入力の解析、クエリの解析

�転置インデックスによる検索

�結果のスコアリング

...などをサポート

出典:https://www.ibm.com/developerworks/jp/opensource/library/os-apache-lucenesearch/

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

キーワード:全文検索

� 全文検索 = Full Text Search�文章等のごく一部を高速に探し出す検索

� 転置インデックス�キーワードがどのデータに属するか?を記録�データ(文書)からキーワードを抽出する必要がある

� (参考)B-Treeインデックス� 完全一致(と前方一致)がきわめて高速� 曖昧な検索には強くない

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

キーワード:転置インデックス

�文章に単語が含まれる

⇔ 単語が含まれる文章を探す

出典:http://thinkit.co.jp/free/article/0710/17/1/

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

キーワード:N-gram

� N-gram�決まった文字数で分割を繰り返す

出典:http://handin.sakura.ne.jp/archives/179

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

キーワード:形態素解析

�形態素解析

�日本語の文法構造と辞書などから、単語を分割(+意味づけ)

�実装としては。。� MeCab系(MeCab、Sen、Chasen、Gosen)� KyTea� Kuromoji

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

キーワード:全文検索

� 文章(自然言語)を快適に検索するためには...� TOKENING

� , ()など記号での分割、日本語の分かち書き化

� N-gram、形態素解析

� STEMMING� Fishing, fished, Fish, Fisher > fish

� FILTERLING� ストップワード(て、に、を、は、など)、HTMLタグの除去

� SCOREING� 順位付けを計算する

Luceneはこれらの機構も提供している

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

キーワード:REST

� REST = REpresentational State Transfer� 2000年にRoy Fielding氏が提唱した、分散システムにおいて複数の

ソフトウェアを連携させるのに適した設計原則の集合

� 「セッションなどの状態管理を行わない(やり取りされる情報はそれ自体で完結して解釈することができる)」

� 「情報を操作する命令の体系が予め定義・共有されている」

� 「すべての情報は汎用的な構文で一意に識別される」

� 「情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることができる」

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

キーワード: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

キーワード:NoSQL

� Not Only SQL�データベースはSQLだけじゃないぜ。(的なのり)

� C10K問題への対応

�クライアント1万台問題(client 10,000)

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

キーワード: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

キーワード:NoSQL

� タイプと実装� Key Value Store

� Redis� ...etc

� Column Oriented� Cassandra� ...etc

� Document Oriented� MongoDB� ...etc� ElasticSearch(?)

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

OutLine

� ElasticSearchとは

� さわってみる

�キーワード

�デモについて解説

�情報源

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

デモについて解説

�使用プラグイン

�elasticsearch-head�elasticsearch-HQ�elasticsearch-analysis-kuromoji

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

デモについて解説:elasticsearch

�本体

�Dockerで入れました。

�使用方法

�デプロイdocker pull reoring/docker-elasticsearchdocker run -p 9200:9200 reoring/docker-

elasticsearch� 今回は、nginxなどと動作するように調整

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

デモについて解説:elasticsearch-head�管理インターフェイスを提供するプラグイン

�使用方法

�プラグインインストール./bin/plugin -i mobz/elasticsearch-head

�アクセスhttp://localhost:9200/_plugin/head/

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

デモについて解説:elasticsearch-HQ�管理インターフェイスを提供するプラグイン

�使用方法

�プラグインインストール./bin/plugin -i royrusso/elasticsearch-HQ

�アクセスhttp://localhost:9200/_plugin/HQ/

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

デモについて解説: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

デモについて解説:その他

� 入れたかったもの� Kibanaやfluentdとの連動� River系のプラグイン

� elasticsearch-river-mongo� elasticsearch-river-rdbc� elasticsearch-river-fluentd

まにあいませんでした。m(_ _)m

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

OutLine

� ElasticSearchとは

� さわってみる

�キーワード

�デモについて解説

�情報源

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

情報源

� 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

おわり

� ご清聴ありがとうございます。