elasticsearch入門 pyfes 201207

Post on 14-Jun-2015

21.280 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

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/

TRANSCRIPT

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

top related