elasticsearch-pyを試す

ElasticsearchのPython用クライアントであるelasticsearch-pyを試してみる。
pipが利用できる環境であれば、

$ sudo pip install elasticsearch

とすれば利用できるようになる。
あとは、以下のような感じでes.pyとか適当に作って、

# -*- coding: utf-8 -*-
from datetime import datetime
from elasticsearch import Elasticsearch
es = Elasticsearch("localhost:9200")
# データの登録
res1 = es.index(index="sample", doc_type="data",
                  body={"msg":"Hello", "timestamp": datetime.now()}, id="1")
print(res1)
# 検索
res2 = es.search(index="sample", doc_type="data",
                 body={"query":{"match_all":{}}})
print(res2)
# インデックスの削除
res3 = es.indices.delete(index="sample")
print(res3)

これを実行すれば、アクセスすることができます。
結構、簡単に使えますね。

Synonymプラグイン

Elasticsearch Analysis SynonymLUCENE-5252で上がっているNGramSynonymTokenizerをElasticsearchで利用できるようにしたプラグインです。詳しいことは、LUCENE-5252をググって確認してもらうのが良いですが、無邪気にSynonymTokenFilterを使っていると予期しない問題に遭遇することもあるかと思いますが(特に日本語とかで)、その辺の対応ができるかと思います。このプラグインとしては、NGramSynonymTokenizerをngram_synonymとして登録してあるので、インデックスの設定でanalyzerとして利用設定すれば使うことができます。というわけで、日本語検索では利用してみるとよいと思います。

Reindexingプラグイン

ReindexingプラグインはElasticsearchでドキュメントを追加したときにJSONデータを保存しているsourceフィールドを利用して、スクロールスキャンで既存のデータをマルっと別のインデックスへ再登録することができるプラグインです。
これにより、インデックスをコピーすることができます。たとえば、

$ curl -XPOST localhost:9200/sample/_reindex/newsample/

とすることで、sampleインデックスをnewsampleインデックスへコピーが簡単にできます。
さらに、urlパラメータを利用することで、別のElasticsearchクラスタへもデータを送ることができます。

$ curl -XPOST localhost:9200/sample/_reindex/newsample/?url=http%3A%2F%2Flocalhost%3A9200%2F

という感じで、登録先を指定することもできます。
あとは、コピー先のインデックスを用意しておかなければ、作成時にインデックスが作られることになりますが、既存と異なるインデックスセッティングやマッピングでインデックスを作成しておいてから再インデキシングを実行すると、既存と異なる設定のインデックスに置き換えることもできます。これをすることで、Analayzerの比較検証とかもやりやすくなるかと思います。