-
-
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を付与 カツオ 1 は 1 サザエ 1 の 1 弟 1 文章を単語に分割し、 サザエ 2 は 2 ワカメ 2 の 2 姉 2 単語:ドキュメントIDと整理 の 1 2 ワカメ 2 単語をキー、ドキュメントIDの は 1 2 弟 1 配列を値とする表を作成 = カツオ 1 姉 2 転置インデックス サザエ 1 2
-
p 転置インデックスの検索 転置インデックス の 1 2 検索クエリ 検索結果 は 1 2 カツオ カツオ 1 1 AND サザエ 1 2 サザエ ワカメ 2 弟 1 姉 2
-
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 Node Shard0 Shard0 (Index1) (Index2) Shard1 Shard1 (Index2) (Index1)
-
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で 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以外にパラメータ で指定も可能)
-
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の一部にインデックス名を保持 Index名 $ curl --XPUT http://localhost:9200/elasticsearch p 複数のインデックスに対する検索も可能 p インデックス名をカンマ区切りで指定すればOK $ curl --XGET http://localhost:9200/twitter,elasticsearch/tweet/ _search?q=message:elasticsearch
-
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 単語集 p elasticsearchって? p アーキテクチャ概要
-
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 ※妄想しながら書いてます
-
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 --