Advertisement
Advertisement

More Related Content

Advertisement

Recently uploaded(20)

Elasticsearch入門 pyfes 201207

  1. @johtani  
  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  -­‐    
Advertisement