View
21.282
Download
2
Category
Preview:
DESCRIPTION
I'm learning elasticsearch now. This slide is old, new version is here. -> http://blog.johtani.info/blog/2013/08/30/hold-first-elasticsearch-meetup-in-japan/
Citation preview
@johtani
p 所属:㈱シーマーク p 氏名:大谷 純 p twitter:@johtani p ブログ: http://johtani.jugem.jp
p 「Apache Solr入門」 の著者の一人 まだ売ってるはず。
p lucene-‐gosenのcommitter
p pyfes初参加(なぜか、家族イベントとかぶって参加できず)
p Javaがメインで、Pythonあんまりやらないです。すみません。
p シールが欲しくてやってきました。
p 単語集
p elasticsearchって?
p アーキテクチャ概要
p 単語集
p elasticsearchって?
p アーキテクチャ概要
p 転置インデックス(inverted index)と shard
p analysisとtextとterm
p cluseterとnode
p documentとfield
p analysisとtextとterm p text
p 入力された文字列。文章
p analysis p 入力された文字列を解析しtermという単位に分解する処理 p 例:N-‐Gram、形態素解析、空白区切りなど
p term p textを解析した結果として出力される単語 p この単語を元に転置インデックスを作成
p 転置インデックス
カツオはサザエの弟
サザエはワカメの姉
1
2
文章を単語に分割し、 単語:ドキュメントIDと整理
対象とする文章(ドキュメント)に IDを付与
単語をキー、ドキュメントIDの 配列を値とする表を作成 = 転置インデックス
カツオ 1 は 1 サザエ 1 の 1 弟 1
サザエ 2 は 2 ワカメ 2 の 2 姉 2
カツオ 1
は
1
の 1
弟 1
サザエ 2
ワカメ 22
姉 2
1 2
転置インデックス
検索クエリ
カツオ 1
は
1
の 1
弟 1
サザエ 2
ワカメ 2
2
姉 2
1 2 カツオ
サザエ
AND
検索結果
1
p 転置インデックスの検索
p documentとfield p document
p LuceneでRDBのレコードに相当するものを意味する p documentが検索結果に出てくる1件分のデータ
p field p RDBのカラムに相当するもの p documentは複数のfieldから構成される p 転置インデックスが作成される最小単位 p fieldには、保存用(stored)とインデックス(indexed)がある。
p indexとshard p index
p RDBのデータベースに相当する概念 p 複数のフィールドの転置インデックスから構成
p shard p Luceneの1つのインスタンスに相当 p 複数のshardを束ねて1つのインデックスとすることが可能 p レプリカされるインデックスの単位でもある
p clusterとnode p cluster
p 1つ以上のnodeから構成されるnodeの集合 p 1つのマスターノードが自動で選出される。 p マスターノードが故障したら、別のものが選出される p マスターノードの役割はクラスターの状態のメンテナンスやノードの追加、削除によりshardを再配置するときの動作
p node p elasticsearchのインスタンス p node内部に複数のshardを保持できる
Cluster
Node
Shard1 (Index2)
Shard0 (Index1)
Node
Shard1 (Index1)
Shard0 (Index2)
p 単語集
p elasticsearchって?
p アーキテクチャ概要
p 分散型でRESTfulな検索エンジン
p Open Source Software p Apache Software License Version 2.0
p Apache Luceneをベースに構築
p スキーマフリー&ドキュメント指向
p マルチテナント対応
トレードマーク?
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 } }‘ インデックス毎に設定が可能。
p インデックス(データ登録) p 登録ももちろんJSONで
$ 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以外にパラメータで指定も可能)
Index名 Type名 ID
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‘
クエリによる削除も可能
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/
p ソースはGithubで公開 p https://github.com/elasticsearch/elasticsearch
p Apache Software License V2.0
p 最新安定版は0.19.8(trunkが0.20.0)
p Apache Lucene p Javaで書かれた、転置インデックスのライブラリ p ハイライト、Geo検索などいろいろと検索に関連する機能も充実
p elasticsearchの最新版では3.6.1を利用 p 利用モジュール
p analyzer、core、highlighter、memory、queries
p Document(JSON)で登録すると型を推測してインデックスに登録
p もちろん、厳密に指定して登録も可能 p Schema Mapping
$ curl -‐XPUT 'http://localhost:9200/twitter/tweet/_mapping' -‐d ‘{ "tweet" : { "properties" : { "message" : {"type" : "string", "store" : "yes"} } } }'
p 複数のインデックスを保持 p URLの一部にインデックス名を保持 $ curl -‐XPUT http://localhost:9200/elasticsearch
p 複数のインデックスに対する検索も可能 p インデックス名をカンマ区切りで指定すればOK
$ curl -‐XGET http://localhost:9200/twitter,elasticsearch/tweet/_search?q=message:elasticsearch
Index名
p Riverはelasticsearchクラスタにデータを流し込むプラガブルなサービス
p プラグインという形で、elasticsearchに組み込み可能 p CouchDB p RabbitMQ p Twitter Stream p Wikipedia
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などなど
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
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/
p 単語集
p elasticsearchって?
p アーキテクチャ概要
Elasticsearch(Node)
ノード間通信 クライアント向けAPI
Index
HTTP Thrift memcached Transport
Network
Gateway
Cluster Indices Discovery
JMX
Thread Pool
Scripting
Shard Allocation
Analysis
Merge Store Translog
Show Log
Plugin
※妄想しながら書いてます
p HTTP p APIをHTTPで提供するモジュール p Nettyを利用したサービス
p memcached p APIをmemcachedプロトコルで提供するモジュール p transport-‐memcachedプラグインが必要
p Thrift p APIをThriftで提供するモジュール p transport-‐thriftモジュールが必要
p Transport p クラスタ内部のノード間通信モジュール p Nettyベースの通信 p 例:HTTP GETリクエストを他のノードに転送
p JMX p JMXでノードの情報にアクセス可能にするモジュール
p Network p HTTPやTransportなどのネットワーク系のモジュールの設定を共通化するモジュール
p Thread Pool p ノードが持つスレッドプールの管理をするモジュール
p 各処理用のプールを保持 p インデックス p 検索 p バルク p リフレッシュなどなど
p cache、fixed、blockingなどのタイプがある。 p Fixed、blockingはキューのサイズなども指定可能
p Plugin p 各種プラグインを管理するモジュール p プラグイン名は「elasticsearch-‐」で始まる p Githubにあるプラグインをダウンロードしてインストールする機能もある
p カスタムAnalyzer、カスタムDiscoveryなど p GUI用のプラグインも https://github.com/mobz/elasticsearch-‐head
p Cluster p Shardの割り当て処理(レプリカ、リバランス、リカバリ、追加削除など)を扱うモジュール
p Node p ノードの挙動を設定するモジュール。 p 例:データを保持するノード、HTTP受付処理をするノードなどにすることが可能
p Discovery p クラスタ内で、ノードを見つけるためのモジュール (マスターノード選出とか)
p Zen、EC2、Zookeeperという種類がある
p Indices p Indexのバッファサイズなどの設定 p Index生成など、Indexに関連する処理のモジュール
p Gateway p クラスタメタデータとインデックスを保存する機能
p 保存先はLocal、Shared FS、Hadoop、S3などあり
p Analysis p インデックス、検索時に利用されるAnalyzerの設定など
p Mapper p 型マッピング定義を扱うモジュール
p 入力データをどのAnalyzerを利用して解析するかなどを静的/動的に指定可能
p Store p インデックスの一時保存を扱うモジュール
p 永続化はGatewayが行う
p メモリ、ディスクが選択可能 p Local Gatewayを利用している場合はメモリを使わない
p Translog p Transaction log/write ahead logを扱うモジュール
p Flushのタイミングなどを指定可能
p Shard Allocation p インデックスの配置をコントロール
p Show Log p 遅い検索クエリをログ出力するモジュール p しきい値など設定可能
p Cache p インデックスに関連するキャッシュを管理 p 検索結果やフィールドの価をキャッシュ
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#/
p ということで、まだまだ入門中です。
p 一緒に勉強してくれる人、募集中です。
p @johtaniまで@ツイートお願いします
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 -‐
Recommended