Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
ElasticSearchとは?
OutLine
ElasticSearch
ElasticSearchとは
� さわってみる
� キーワード
� デモについて解説
� 情報源
�
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
�
�

�

STEMMING
�

�

Fishing, fished, Fish, Fisher > fish

FILTERLING
�

�

, ()など記号での分割、日本語の分かち書き化
N-gram、形態素解析

ストップワード(て、に、を、は、など)、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-elasticsearch
docker run -p 9200:9200 reoring/dockerelasticsearch
� 今回は、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
おわり
�

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

More Related Content

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