Dictionaryプラグイン

Elasticsearch Dictionaryプラグインを作りました。Kuromojiのユーザー辞書やSynonymTokenFilterのシノニム辞書を管理するような機能が持てればなっと思っています。今後、必要な機能を追加していくかもしれませんが現時点では、辞書ファイルで課題になるのが、インデックスをスナップショットとリストアを行うときに辞書ファイルが保存されないので、辞書ファイルを持つインデックスファイルをスナップショットをとって、別環境に無邪気にリストアしても辞書ファイルがないのでインデックスが開かず、という状況です。しかも、現状のElasticsearchだとクラスタイベントをうまく処理しないので、おかしな状態になります。というわけで、このプラグインがインデックスのスナップショットを取ると同時に、インデックス内に含まれる辞書ファイル(.txtという値をもつもの)がインデックス設定にあればそれを辞書用のスナップショットを取ります(つまり、〜.dictionary〜という感じの名前のスナップショットが作成される)。というわけで、リストアするときには、普通にリストアを実施すると、辞書用スナップショット(〜.dictionary〜の名前のスナップショット)が存在するかどうかチェックして、存在すれば、先に辞書を復元する感じです。これで、スナップショット用リポジトリをリストア先にもきちんと設定されていれば、辞書も安心して扱える感じです。
そんな感じですが、Kuromojiなどで辞書ファイルを持っていたりする場合とかで利用してもらえれば、辞書も安心して復元できると思います。

Elasticsearch Cluster Runner

Elasticsearch関連の開発をしていると、クラスタ環境とかでのテストとかを使いたくなるケースがあると思う。Elasticsearchはクラスタ環境を簡単に作れるけど、わざわざ複数のインスタンスを立ち上げてとかは面倒だな、と思っていたので、ElasticsearchのInternalNodeを使って、Ⅰつのインスタンスで複数のElasticsearchのノードを起動できるElasticsearch Cluster Runnerを作ってみました。
JavaとMavenがインストールされた環境であれば、

git clone https://github.com/codelibs/elasticsearch-cluster-runner.git

として、プロジェクトをcloneして、あとは

mvn exec:java

とすれば、3ノードのElasticsearchクラスタが起動します。
-basePathオプションでElasticsearchのルートディレクトリを指定することはできるけど、デフォルトではes_homeディレクトリが作成されてそこを利用されます。logsとかはノードごとにそこ以下にディレクトリが作成されます。
-numOfNodeを変更すればノード数も変更することができます。
あとは使いながら、改善していこうかと…。

River Web 1.0.1をリリース

River WebのIssueでNTLM認証はできないの?というコメントをもらったので、対応して、1.0.1をリリースしました。まぁ、中身はS2Robotだから、内部的には対応しているものの、River Webから指定する口がなかった感じ。BASIC/DIGEST認証を含めて対応して、クロール時に任意のヘッダーも渡せるようにしました。という感じで、これは要望ベースに対応していこうかな…。