[Grails] elasticsearch-grails-plugin を入れてみる index編

elasticsearch grails plugin を入れるelasticsearch grails plugin 設定詳細 で、設定方法を書いたが、次にデータを入れてみる。

データを入れる

通常の Domain と同じ扱いでできる。
違う点は保存するときは、 index() を使う。

ただし、id は自動生成されないので注意。
自動生成したいときは、一度 save() を呼び出す。

検証中だが、一度 save() を呼び出すと、RDB側にも反映されるので意味ないような。。。
save()なしで、elasticsearch側に反映するには、

のように、id を手動で生成する。
ちなみに、idを、UUIDのような文字を含むものにすると、落ちるので注意
id を自動生成する場合は、save() を挟む。先ほど言ったがRDBにも反映されてしまうが。

domain.index()
を使わずに、 elasticSearchService というサービスを使う方法もあるみたいだが、ここに書いてある、特に変わらなそうだから、今回は割愛した。

[Grails] elasticsearch-grails-plugin を入れてみる 設定詳細

前回 elasticsearch-grails-plugin の導入部だけをやってみたが、今回はさらに詳細にやってみる。

client mode

前回にも書いたが、Config.groovy に
client mode として、”local”, “node”, “dataNode”, “transport” を設定できる。
各モードの詳細ここを参照
おおざっぱに
local : ローカル(起動インスタンス)のみのノード 
node : ノードとして起動するが、データはもたない
dataNode : データを保持するノード
transport : ノードとして起動せずに、マスタ側 elasticsearch と通信を専門とする

ここで、いくつか注意点がある。

elasticSearch.client.mode = ‘node’ の注意点

master 側のmulticastが有効じゃないと動かない
elasticsearch.yml に以下があるか確認

elasticSearch.client.mode = ‘dataNode’ の注意点

今度は、master 側のmulticastが無効でも動くが、無効にしている場合は
Config.groovy で
elasticSearch.discovery.zen.ping.unicast.hosts を指定しないといけない。

Domain の作成

Domain に以下をいれると、Elasticsearch 用のドメインとして認識される。

各プロパティーの内容も以下のように設定できる。
例えば、data / post は not analyzed にして、 kibana 用に calcDate には @timestamp という別名をつけたい場合は以下のようにする。