SlideShare a Scribd company logo
@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を付与	
 




カツオ	
  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  ガイド(セットアップ、各種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	
                      ノード間通信	
 

      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	
  -­‐	
  	
  

More Related Content

Elasticsearch入門 pyfes 201207

  • 2. p  所属:㈱シーマーク   p  氏名:大谷 純   p  twitter:@johtani   p  ブログ:   http://johtani.jugem.jp   p  「Apache  Solr入門」    の著者の一人    まだ売ってるはず。   p  lucene-­‐gosenのcommitter
  • 3. p  pyfes初参加(なぜか、家族イベントとかぶっ て参加できず)   p  Javaがメインで、Pythonあんまりやらないです。 すみません。   p  シールが欲しくてやってきました。  
  • 4. p  単語集   p  elasticsearchって?   p  アーキテクチャ概要  
  • 5. p  単語集   p  elasticsearchって?   p  アーキテクチャ概要  
  • 6. p  転置インデックス(inverted  index)と   shard   p  analysisとtextとterm   p  cluseterとnode   p  documentとfield  
  • 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)
  • 14. p  単語集   p  elasticsearchって?   p  アーキテクチャ概要  
  • 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
  • 24. p  Riverはelasticsearchクラスタにデータを流 し込むプラガブルなサービス   p  プラグインという形で、elasticsearchに組み 込み可能   p  CouchDB   p  RabbitMQ   p  Twitter  Stream   p  Wikipedia  
  • 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/  
  • 28. p  単語集   p  elasticsearchって?   p  アーキテクチャ概要  
  • 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#/
  • 40. p  ということで、まだまだ入門中です。   p  一緒に勉強してくれる人、募集中です。   p  @johtaniまで@ツイートお願いします
  • 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  -­‐