Elasticsearchでは、Snapshotという機能を使うことでIndexのバックアップを取得することができるらしい。 別ディスクにオンタイムで取得できるらしく、使い勝手はよさそう。

1. Snapshot用リポジトリの作成

Snapshotを取得するにあたり、事前にElasticsearch側にSnapshot用のリポジトリを作成する必要がある(取得対象となるリポジトリとは別)。 Snapshotの保存先ディレクトリについても作成する必要があるので、まず最初にSnapshot用のディレクトリを作成する。

sudo mkdir -p /path/to/snapshot
sudo chown elasticsearch:elasticsearch /path/to/snapshot

ディレクトリを作成したら、Elasticsearchの設定ファイル(/etc/elasticsearch/elasticsearch.yml)に以下のように追記をする。


Elasticsearchでメールアドレスを登録する際、ドメイン名でのみヒットするようにしたいということがあったので、そのいった処理ができるようanalyzerを設定してみたのでその備忘。 今まで知らなかったのだけど、Analyzerで指定できるchar_filterでは正規表現での値の置換が行えるらしく、それで@より前を全て削除することでドメインのみをtokenとして登録できるようだ。

以下、定義用のjsonサンプル。

{
  "settings": {
    "analysis": {
      "analyzer": {
        "domain_split_analy...

Elasticsearchにメールアドレスを放り込む際、どうもサブドメイン等でSearchを行う際にうまく検索ができないことがあった。 そもそもElasticsearchの検索の仕組みをよく理解できてなかったのもあるのだが、ドキュメント作成時にAnalyzerで分割した文字単位で検索を行うようだ。 で、その差異にデフォルトのAnalyzerではうまくメールアドレスの分割ができていなかったのが原因のようだ。

Elasticsearchでは、以下のようにリクエストを投げることでAnalyzerでどのように分割されるのかを見ることができるので、それでメールアドレスがどのように分割されるのか見てみ...


ElasticsearchでAggregationsを使って集計処理を行っていたところ、どうも件数が少なかった。 で調べてみたところ、どうやら抽出結果と同じくこちらもデフォルトでは10件までしか取得できないらしい。

で、集計結果を10件以上取得するにはどうすれば良いのかなと調べてみたところ、どうやらクエリ内でサイズを指定して、そこから取得する必要があるようだ。上限は10,000件らしい。

    s_base_query = {
        'query':{'bool':{'must':[],'should':[]}},
        'size': 0,
        'a...

Pythonを使ってElasticsearchからデータを取ってくる際、どうも計算が合わない。 なんでだろうなぁと思い調べてみたところ、どうやらElasticsearchではデータを取得する際、デフォルトでは10件までしか取得できないらしい。で、10件以上のデータを取得する場合だと、以下の方法があるようだ。

  • scrollでデータを繰り返し取得して条件にあったデータを全て取得してくる
  • query実行時にsizeを指定することで指定した件数までのデータを取得する(上限は10,000まで?)

上限があるというのもあり、2個目の方法はちょっと… という訳で、scrollで処理をさせることに...