Contenu connexe Similaire à Elasticsearch入門 pyfes 201207 (20) Elasticsearch入門 pyfes 2012072. p 所属:㈱シーマーク
p 氏名:大谷 純
p twitter:@johtani
p ブログ:
http://johtani.jugem.jp
p 「Apache
Solr入門」
の著者の一人
まだ売ってるはず。
p lucene-‐gosenのcommitter
7. p analysisとtextとterm
p text
p 入力された文字列。文章
p analysis
p 入力された文字列を解析しtermという単位に分解する処理
p 例:N-‐Gram、形態素解析、空白区切りなど
p term
p textを解析した結果として出力される単語
p この単語を元に転置インデックスを作成
8. p 転置インデックス
1 カツオはサザエの弟
対象とする文章(ドキュメント)に
2 サザエはワカメの姉
IDを付与
カツオ
1 は 1 サザエ
1 の 1 弟 1
文章を単語に分割し、
サザエ
2 は 2 ワカメ
2 の 2 姉 2 単語:ドキュメントIDと整理
の 1 2 ワカメ
2
単語をキー、ドキュメントIDの
は 1 2 弟 1 配列を値とする表を作成
=
カツオ
1 姉 2 転置インデックス
サザエ
1 2
9. p 転置インデックスの検索
転置インデックス
の
1
2
検索クエリ
検索結果
は
1
2
カツオ
カツオ
1
1
AND
サザエ
1
2
サザエ
ワカメ
2
弟
1
姉
2
10. p documentとfield
p document
p LuceneでRDBのレコードに相当するものを意味する
p documentが検索結果に出てくる1件分のデータ
p field
p RDBのカラムに相当するもの
p documentは複数のfieldから構成される
p 転置インデックスが作成される最小単位
p fieldには、保存用(stored)とインデックス(indexed)
がある。
11. p indexとshard
p index
p RDBのデータベースに相当する概念
p 複数のフィールドの転置インデックスから構成
p shard
p Luceneの1つのインスタンスに相当
p 複数のshardを束ねて1つのインデックスとすることが可能
p レプリカされるインデックスの単位でもある
12. p clusterとnode
p cluster
p 1つ以上のnodeから構成されるnodeの集合
p 1つのマスターノードが自動で選出される。
p マスターノードが故障したら、別のものが選出される
p マスターノードの役割はクラスターの状態のメンテナンスや
ノードの追加、削除によりshardを再配置するときの動作
p node
p elasticsearchのインスタンス
p node内部に複数のshardを保持できる
13. Cluster
Node
Node
Shard0
Shard0
(Index1)
(Index2)
Shard1
Shard1
(Index2)
(Index1)
15. p 分散型でRESTfulな検索エンジン
p Open
Source
Software
p Apache
Software
License
Version
2.0
p Apache
Luceneをベースに構築
p スキーマフリー&ドキュメント指向
トレードマーク?
p マルチテナント対応
16. p JSONで設定、インデックス、検索が可能
p もちろん、設定ファイルによる設定も可能
p URLでIndex名、データタイプを表現
p 例:設定(shardとreplicaの数を設定)
$
curl
-‐XPUT
http://localhost:9200/twitter/tweet/
-‐d
'{
"settings"
:
{
"number_of_shards"
:
2,
"number_of_replicas"
:
3
}
}‘
インデックス毎に設定が可能。
17. p インデックス(データ登録)
p 登録ももちろんJSONで
Index名
Type名
ID
$
curl
-‐XPUT
'http://localhost:9200/twitter/tweet/1'
-‐d
'{
"user"
:
“johtani",
"post_date"
:
"2012-‐07-‐15T14:12:12",
"message"
:
“I
talk
to
elasticsearch
at
#pyfes"
}‘
フィールドは自動で型を判別して登録。
(もちろん指定も可能)
IDを自動で生成も可能(URLのIDを指定せずに登録すればOK)
IDのハッシュ値でshardにルーティング(ID以外にパラメータ
で指定も可能)
18. p 取得(GET)
curl
-‐XGET
‘http://localhost:9200/twitter/tweet/1’
curl
-‐XGET
'http://localhost:9200/twitter/tweet/1?
fields=user,message'
データの取得。2つ目は取得するフィールドを指定してからの取得。
fieldsパラメータで取得できるのはstoredフィールドのみ
p 削除(DELETE)
curl
-‐XDELETE
'http://localhost:9200/twitter/tweet/1‘
curl
-‐XDELETE
'http://localhost:9200/twitter/tweet/_query?
q=user:johtani‘
クエリによる削除も可能
19. p 検索(JSONベースの検索DSL)
$
curl
-‐XGET
‘http://localhost:9200/twitter/tweet/_search’
-‐d
‘{
“query”:
{
"term"
:
{
"user"
:
“johtani"
}
}
}'
例:userフィールドをjohtaniで検索
p 検索機能としては、以下をカバー
ファセット、絞り込み検索、ハイライト、Geo検索、
範囲検索、カスタムスコアなどなど
http://www.elasticsearch.org/guide/reference/query-‐dsl/
20. p ソースはGithubで公開
p https://github.com/elasticsearch/
elasticsearch
p Apache
Software
License
V2.0
p 最新安定版は0.19.8(trunkが0.20.0)
21. p Apache
Lucene
p Javaで書かれた、転置インデックスのライブラリ
p ハイライト、Geo検索などいろいろと検索に関連する機
能も充実
p elasticsearchの最新版では3.6.1を利用
p 利用モジュール
p analyzer、core、highlighter、memory、queries
22. p Document(JSON)で登録すると型を推測してイン
デックスに登録
p もちろん、厳密に指定して登録も可能
p Schema
Mapping
$
curl
-‐XPUT
'http://localhost:9200/twitter/tweet/_mapping'
-‐d
‘{
"tweet"
:
{
"properties"
:
{
"message"
:
{"type"
:
"string",
"store"
:
"yes"}
}
}
}'
23. p 複数のインデックスを保持
p URLの一部にインデックス名を保持
Index名
$
curl
-‐XPUT
http://localhost:9200/elasticsearch
p 複数のインデックスに対する検索も可能
p インデックス名をカンマ区切りで指定すればOK
$
curl
-‐XGET
http://localhost:9200/twitter,elasticsearch/tweet/
_search?q=message:elasticsearch
25. p JSON
over
HTTPが基本
p Java、GroovyのAPIもある
p その他にClientsライブラリも存在
p http://www.elasticsearch.org/guide/
appendix/clients.html
p pyes
–
Python
Client
p Tire
–
Ruby
API&DSL,
with
Active
Record/
ActiveModel
integration
p erlastic_search
–
Erlang
client
p その他にScala、.NET、PHPなどなど
26. p 様々なライブラリなどとの連携も
p Grails
:
ElasticSearch
Grails
plugin
p django-‐elasticsearch
:
Django
ElasticSearch
Bachend
p Wonderdog
:
Hadoop
bulk
loader
into
elasticsearch
p elasticflume
:
Flume
sink
implementation
p elasticsearch-‐mocksolrplugin
:
Use
Solr
clients/tools
with
ElasticSearch
27. p ガイド(セットアップ、各種APIも)
p トップ
http://www.elasticsearch.org/guide/
p 各種操作用API
http://www.elasticsearch.org/guide/
reference/api/
p 検索クエリDSL
http://www.elasticsearch.org/guide/
reference/query-‐dsl/
29. Elasticsearch(Node)
クライアント向けAPI
ノード間通信
HTTP
Thrift
memcached
Transport
JMX
Network
Cluster
Thread
Indices
Scripting
Discovery
Pool
Shard
Gateway
Index
Allocation
Analysis
Show
Log
Plugin
Translog
Merge
Store
※妄想しながら書いてます
30. p HTTP
p APIをHTTPで提供するモジュール
p Nettyを利用したサービス
p memcached
p APIをmemcachedプロトコルで提供するモジュール
p transport-‐memcachedプラグインが必要
p Thrift
p APIをThriftで提供するモジュール
p transport-‐thriftモジュールが必要
31. p Transport
p クラスタ内部のノード間通信モジュール
p Nettyベースの通信
p 例:HTTP
GETリクエストを他のノードに転送
p JMX
p JMXでノードの情報にアクセス可能にするモジュール
p Network
p HTTPやTransportなどのネットワーク系のモジュー
ルの設定を共通化するモジュール
32. p Thread
Pool
p ノードが持つスレッドプールの管理をするモジュー
ル
p 各処理用のプールを保持
p インデックス
p 検索
p バルク
p リフレッシュなどなど
p cache、fixed、blockingなどのタイプがある。
p Fixed、blockingはキューのサイズなども指定可能
33. p Plugin
p 各種プラグインを管理するモジュール
p プラグイン名は「elasticsearch-‐」で始まる
p Githubにあるプラグインをダウンロードしてインス
トールする機能もある
p カスタムAnalyzer、カスタムDiscoveryなど
p GUI用のプラグインも
https://github.com/mobz/elasticsearch-‐head
34. p Cluster
p Shardの割り当て処理(レプリカ、リバランス、リカ
バリ、追加削除など)を扱うモジュール
p Node
p ノードの挙動を設定するモジュール。
p 例:データを保持するノード、HTTP受付処理をする
ノードなどにすることが可能
p Discovery
p クラスタ内で、ノードを見つけるためのモジュール
(マスターノード選出とか)
p Zen、EC2、Zookeeperという種類がある
35. p Indices
p Indexのバッファサイズなどの設定
p Index生成など、Indexに関連する処理のモジュール
p Gateway
p クラスタメタデータとインデックスを保存する機能
p 保存先はLocal、Shared
FS、Hadoop、S3などあり
36. p Analysis
p インデックス、検索時に利用されるAnalyzerの設定
など
p Mapper
p 型マッピング定義を扱うモジュール
p 入力データをどのAnalyzerを利用して解析するかな
どを静的/動的に指定可能
37. p Store
p インデックスの一時保存を扱うモジュール
p 永続化はGatewayが行う
p メモリ、ディスクが選択可能
p Local
Gatewayを利用している場合はメモリを使わない
p Translog
p Transaction
log/write
ahead
logを扱うモ
ジュール
p Flushのタイミングなどを指定可能
38. p Shard
Allocation
p インデックスの配置をコントロール
p Show
Log
p 遅い検索クエリをログ出力するモジュール
p しきい値など設定可能
p Cache
p インデックスに関連するキャッシュを管理
p 検索結果やフィールドの価をキャッシュ
39. p HP
p http://www.elasticsearch.org/
p スライド
p https://speakerdeck.com/u/kimchy/p/the-‐
road-‐to-‐a-‐distributed-‐search-‐engine
p https://speakerdeck.com/u/kimchy/p/
elasticsearch-‐big-‐data-‐search-‐analytics
p http://spinscale.github.com/elasticsearch/
2012-‐03-‐jugm.html#/
41. p guava
-‐
Googleが公開しているJava用こらライブラリ。collection周り、キャッシュを
主に利用
p trove
-‐
プリミティブ型に関するコレクションライブラリ
p joda-‐time
-‐
日付用ライブラリ
p mvel2
-‐
スクリプトエンジン。スクリプトモジュールで利用
p jackson
-‐
JSONライブラリ
p snakeyaml
-‐
YAMLライブラリ
p netty
-‐
軽量通信ライブラリ?
p log4j
-‐
Logライブラリ
p slf4j
-‐
Logライブラリ
p jna
-‐
p sigar
-‐
The
Sigar
API
provides
a
portable
interface
for
gathering
system
information.モニタリング用
p testng
-‐
p junit
-‐
Unitテスト用ライブラリ
p bsh
-‐
p jcommander
-‐
p hamcrest
-‐