Translate

ラベル Elasticsearch の投稿を表示しています。 すべての投稿を表示
ラベル Elasticsearch の投稿を表示しています。 すべての投稿を表示

2017/01/12

Ruby On Rails で、AWS Elasticsearch のプラクティス

前回のTwitterアプリに引き続き、AWS Elasticsearchについても運用レベルのものを開発したので、開発の要点をまとめておきます。

参考:
https://www.elastic.co/guide/index.html
http://ruby-rails.hatenadiary.com/entry/20151018/1445142266#rails-elasticsearch-1-freetext-keyword
http://qiita.com/kyouryu_/items/061b3bc47c1d64b37818
http://easyramble.com/elasticsearch-queries-and-filters.html

やったこと

  • AES(Amazon Elasticsearch Service)を使ったElasticsearch
  • Railsのモデルを、Elasticsearchとして使う
  • RakeタスクでElasticsearchにデータをインポートする

要点

以降詳細を列挙していきますが、特に重要だと思ったポイント:

  • 本家サイトが大事。
    Qiitaとかまとめ記事いろいろあるけど、用語の意味や使い方が曖昧・まちまちなので、混乱しやすい。本家できちんと基礎から数時間かけて理解した方が最終的には速い。
  • いきなりRails使わずにCURLとかでElasticsearchってどういう感じなのかを掴んておくといいと思う。
    自分みたいに、いきなりRailsでmodel 使うGemを使うと、自分のやっていることがわけわからず、とりあえず動いているっていう状況になり、応用きかず設計変更やトラブルで大変になる。


AES(Amazon Elasticsearch Service)を使ったElasticsearch

ドメインの取得、オレゴン
Kibana使いづらい
AWS認証

Railsのモデルを、Elasticsearchとして使う

Gem model
検索
 Index、キーワード、AND、OR、Page、Page size、Aggs、Sort

RakeタスクでElasticsearchにデータをインポートする

Gem client

ソースコード



2016/09/30

流行りのビッグデータをやってみた。

最近、Twitterからツイートを分析するような作業が多かったので、これはデータ分析の入り口として良さそうだったので、勉強・実践してみた。

データ分析とは

この定義もかなりあいまいなようでピンとくる記事が見つからなくて困った。
一番わかりやすかったのはこちらのデータサイエンティストの説明。

以下自分なりにまとめた、作業・ツール。

収集 =>  整形  =>  蓄積 =>  分析・可視化
説明 アクセスログや可視化したい統計データなどをDBなどに保存する。 収集した時に実行する場合と、DB保存後にバッチ処理する場合がある。 データを保存しておく場所。DataWareHouseというらしい。 Visualization。これもリアルタイムでデータを更新していくものと、バッチ的に分析するものがある。
ツール
fluentd
logstach
Apache Spark
Hadoop
自作スクリプト
Apache Spark
Hadoop
自作スクリプト
Elasticsearch
Apache Solr
各DB
AWS S3
Google Drive
ローカル
Kibana
Banana
Jupyter
Rstudio
Data sientist workbench
スプレッドシート 

整形・分析などをサービスとして使えるBIツールというものがあるが、今回は調査できなかった。

今回やってみたこと

やり方はいろいろありすぎて、どれがいいのか分からず。流行りのデータ解析らしく、
Spark + Elasticsearch + Kibana
という割りと情報がありそうなものをやってみた。

参考記事とやった結果:
https://github.com/Samemura/twitter-spark

無事、SparkでデータをElasticsearchに蓄積し、Kibanaで表示できるようにできた。

感想

データ分析の流れを構築できたものの、効果的に分析できる方法は構築できなかった。
このあたりはKibanaでは限界がありそうなので、Jupyterなどで分析する方法を検討したい。
またデータ収集部分は、普段から使っているスクリプトなどでもあまり困らなそうだと感じた。大量のデータをリアルタイムで分析する、まさにビッグデータでなければメリットがなさそう。

アルゴリズムの検討などには、
1.自作スクリプトでデータ収集
2.Jupterなどで詳細分析・可視化
を次のステップとしたい。

2016/06/13

Elasticsearch をRuby On Railsで。

タイトルのとおり、Elasticsearch をRailsで実装したので、そのまとめ。

やったこと


  1. RakeタスクでcsvなどのファイルからElasticsearchにIndexを作成
  2. 作成したIndexをModelで検索

コア部分のソースコード

https://github.com/Samemura/Elasticsearch-rails-example

解説

だいたいのことは、Githubを見ればわかるので、ここでは検索まわりを中心に紹介する。
今回はAmazon Elasticsearch Service を使ったが、基本はこちらの記事で全てまかなえた。
bool: { term: { 検索対象 => 検索する値 }} 
term を繰り返して、検索対象を追加する。

OR検索

bool: { should: { 検索対象 => 検索する値 }} 
should を繰り返して、検索対象を追加する。

NOT検索

bool: { must_not: {bool: { should: { 検索対象 => 検索する値 }}}
should を繰り返して、検索対象を追加する。

RANGE検索

range: {検索対象: {lte: 値}}
lte は以下。
この時にDateの値の場合は、きちんとフォーマットを定義しないと、範囲チェックできない。
        type: date
        analyzer: standard
        format: yyyy/MM/dd

ページング

{size: 件数},
{from: 開始件数}

ソート

{sort: {ソート対象: desc} }
desc は降順

集計

aggregations: {agg_hits: {terms: { field: 集計対象, size: サイズ } # size = 0 means Integer.MAX_VALUE. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_size
集計結果を取得できる最大件数を指定する。0は無制限。よく使うのはTop10とか。

AWS認証

AWSのIAM認証でアクセスしたい場合は、こちらのGemを使えば簡単にできた。意外と情報は少なかったので、ハマった。