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