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

elasticsearch-grails-plugin については、
elasticsearch grails plugin を入れる
elasticsearch grails plugin 詳細設定
elasticsearch grails plugin index編
で紹介した。
今回は、search編。

注意!
日付での検索は注意が必要なので、日付を使う検索は一番したの記述をみてください。

Query Strings で検索する方法

search() で、中に検索条件を書く

結果は以下のようになる。
result.searchResults : 検索結果
result.total : 検索のトータル

一回の検索で、全件は取れない。全件とるには total の数になるか、searchResults がなくなるまで検索する。
その時は、 以下のように、from を使うとよい。

Query Strings で複雑なクエリ

QueryString の文法は
http://lucene.apache.org/core/3_0_3/queryparsersyntax.html にある。

例えば、AND でつなげたい場合は、

Query Closure で検索する方法

こちらは、Elasticsearch での検索と同じような感覚で使える。

内部で if文も使える。

日付の扱い

search は日付の検索に注意。
Config.groovy で、

で、日付のフォーマット変更できるみたいだけど、将来変わる可能性ありとの事なので、標準のまま利用する。

標準だと、以下のような形式で入っているので、検索するときはこの形式にする

SimpleDateFormat を使うとこんな感じ

ただし、検索のときにロケール/Timezone を意識してね。




[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 というサービスを使う方法もあるみたいだが、ここに書いてある、特に変わらなそうだから、今回は割愛した。