CodeLibsで提供している、検索結果の上位N件を動的に並び替えるDynaRankプラグインとドキュメント内の指定されたフィールドのMinHash値を計算するMinHashプラグインですが、ドキュメントを書かなければと思いつつ、時間が経ってしまっていました…。
そんな感じで、時間が過ぎてしまっていたのですが、@takezoenさんによりこちらに利用方法を書いていただきました。(すばらしいー)Elasticsearchを全文検索的に利用していて、EC系だとありがちな気もしますが、似たような検索結果が出て困るとか言うようなときにその組み合わせとかで試してみるといい感じでばらまいてくれるので良いかもしれません。
DynaRank自体は別にMinHashに依存しているわけではなく、汎用的な感じで、自由に検索結果を並び替える目的で利用することができます。
意図的に上位N件を並び替えたいとかいうときに便利です。
こことかここを見ると、ebayでもdiversityに取り組んでいるみたいだけど、そんな感じのこともDynaRankで実装できるといいのにな〜と思う今日このごろです。
カテゴリー: elasticsearch
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を変更すればノード数も変更することができます。
あとは使いながら、改善していこうかと…。