Elasticsearch入門 pyfes 201207

22,764
-1

Published on

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/

Published in: Technology

Elasticsearch入門 pyfes 201207

  1. 1. @johtani  
  2. 2. p  所属:㈱シーマーク  p  氏名:大谷 純  p  twitter:@johtani  p  ブログ:   http://johtani.jugem.jp  p  「Apache  Solr入門」    の著者の一人    まだ売ってるはず。  p  lucene-­‐gosenのcommitter
  3. 3. p  pyfes初参加(なぜか、家族イベントとかぶっ て参加できず)  p  Javaがメインで、Pythonあんまりやらないです。 すみません。  p  シールが欲しくてやってきました。  
  4. 4. p  単語集  p  elasticsearchって?  p  アーキテクチャ概要  
  5. 5. p  単語集  p  elasticsearchって?  p  アーキテクチャ概要  
  6. 6. p  転置インデックス(inverted  index)と   shard  p  analysisとtextとterm  p  cluseterとnode  p  documentとfield  
  7. 7. p  analysisとtextとterm   p  text   p  入力された文字列。文章   p  analysis   p  入力された文字列を解析しtermという単位に分解する処理   p  例:N-­‐Gram、形態素解析、空白区切りなど   p  term   p  textを解析した結果として出力される単語   p  この単語を元に転置インデックスを作成  
  8. 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. 9. p  転置インデックスの検索 転置インデックス の 1 2 検索クエリ 検索結果 は 1 2 カツオ   カツオ 1   1 AND サザエ 1 2 サザエ ワカメ 2 弟 1 姉 2
  10. 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. 11. p  indexとshard   p  index   p  RDBのデータベースに相当する概念   p  複数のフィールドの転置インデックスから構成   p  shard   p  Luceneの1つのインスタンスに相当   p  複数のshardを束ねて1つのインデックスとすることが可能   p  レプリカされるインデックスの単位でもある
  12. 12. p  clusterとnode   p  cluster   p  1つ以上のnodeから構成されるnodeの集合   p  1つのマスターノードが自動で選出される。   p  マスターノードが故障したら、別のものが選出される   p  マスターノードの役割はクラスターの状態のメンテナンスや ノードの追加、削除によりshardを再配置するときの動作 p  node   p  elasticsearchのインスタンス   p  node内部に複数のshardを保持できる
  13. 13. Cluster Node Node Shard0   Shard0   (Index1) (Index2) Shard1   Shard1   (Index2) (Index1)
  14. 14. p  単語集  p  elasticsearchって?  p  アーキテクチャ概要  
  15. 15. p  分散型でRESTfulな検索エンジン  p  Open  Source  Software   p  Apache  Software  License  Version  2.0  p  Apache  Luceneをベースに構築  p  スキーマフリー&ドキュメント指向   トレードマーク? p  マルチテナント対応  
  16. 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. 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. 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. 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. 20. p  ソースはGithubで公開   p  https://github.com/elasticsearch/ elasticsearch  p  Apache  Software  License  V2.0  p  最新安定版は0.19.8(trunkが0.20.0)  
  21. 21. p  Apache  Lucene   p  Javaで書かれた、転置インデックスのライブラリ   p  ハイライト、Geo検索などいろいろと検索に関連する機 能も充実  p  elasticsearchの最新版では3.6.1を利用   p  利用モジュール   p  analyzer、core、highlighter、memory、queries
  22. 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. 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. 24. p  Riverはelasticsearchクラスタにデータを流 し込むプラガブルなサービス  p  プラグインという形で、elasticsearchに組み 込み可能   p  CouchDB   p  RabbitMQ   p  Twitter  Stream   p  Wikipedia  
  25. 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. 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. 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. 28. p  単語集  p  elasticsearchって?  p  アーキテクチャ概要  
  29. 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. 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. 31. p  Transport   p  クラスタ内部のノード間通信モジュール   p  Nettyベースの通信   p  例:HTTP  GETリクエストを他のノードに転送  p  JMX   p  JMXでノードの情報にアクセス可能にするモジュール  p  Network   p  HTTPやTransportなどのネットワーク系のモジュー ルの設定を共通化するモジュール
  32. 32. p  Thread  Pool   p  ノードが持つスレッドプールの管理をするモジュー ル   p  各処理用のプールを保持   p  インデックス   p  検索   p  バルク   p  リフレッシュなどなど   p  cache、fixed、blockingなどのタイプがある。   p  Fixed、blockingはキューのサイズなども指定可能  
  33. 33. p  Plugin   p  各種プラグインを管理するモジュール   p  プラグイン名は「elasticsearch-­‐」で始まる   p  Githubにあるプラグインをダウンロードしてインス トールする機能もある   p  カスタムAnalyzer、カスタムDiscoveryなど   p  GUI用のプラグインも   https://github.com/mobz/elasticsearch-­‐head
  34. 34. p  Cluster   p  Shardの割り当て処理(レプリカ、リバランス、リカ バリ、追加削除など)を扱うモジュール  p  Node   p  ノードの挙動を設定するモジュール。   p  例:データを保持するノード、HTTP受付処理をする ノードなどにすることが可能  p  Discovery   p  クラスタ内で、ノードを見つけるためのモジュール   (マスターノード選出とか)   p  Zen、EC2、Zookeeperという種類がある
  35. 35. p  Indices   p  Indexのバッファサイズなどの設定   p  Index生成など、Indexに関連する処理のモジュール  p  Gateway   p  クラスタメタデータとインデックスを保存する機能 p  保存先はLocal、Shared  FS、Hadoop、S3などあり
  36. 36. p  Analysis   p  インデックス、検索時に利用されるAnalyzerの設定 など  p  Mapper   p  型マッピング定義を扱うモジュール p  入力データをどのAnalyzerを利用して解析するかな どを静的/動的に指定可能  
  37. 37. p  Store   p  インデックスの一時保存を扱うモジュール   p  永続化はGatewayが行う   p  メモリ、ディスクが選択可能   p  Local  Gatewayを利用している場合はメモリを使わない  p  Translog   p  Transaction  log/write  ahead  logを扱うモ ジュール   p  Flushのタイミングなどを指定可能  
  38. 38. p  Shard  Allocation   p  インデックスの配置をコントロール  p  Show  Log   p  遅い検索クエリをログ出力するモジュール   p  しきい値など設定可能  p  Cache   p  インデックスに関連するキャッシュを管理   p  検索結果やフィールドの価をキャッシュ  
  39. 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. 40. p  ということで、まだまだ入門中です。  p  一緒に勉強してくれる人、募集中です。  p  @johtaniまで@ツイートお願いします
  41. 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  -­‐    
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×