BloGroonga

2016-06-29

Groonga 6.0.5リリース

Groonga 6.0.5をリリースしました!

それぞれの環境毎のインストール方法: インストール

変更内容

主な変更点は以下の通りです。

  • fuzzy_searchmax_distanceを指定しやすく
  • query_expandコマンドの追加
  • ソースからのビルド時間の短縮

fuzzy_searchmax_distanceを指定しやすく

今回のリリースでは、fuzzy_searchmax_distanceが指定しやすくなりました。

fuzzy_search自体はGroonga 6.0.0で導入された、曖昧検索機能を実現するための関数です。 この関数にはいくつか引数があって、第3引数にオブジェクトリテラルを渡すことで、挙動をカスタマイズできるようになっていました。

今回の変更では、第3引数にmax_distanceを直接指定できるようになりました。従来のオブジェクトリテラル形式も指定できます。

max_distanceは数文字程度の違いなら同じとみなすためのパラメータ(編集距離)です。この値を調整することで曖昧検索の度合いを変えることができます。よく使うパラメータなので、より指定しやすくしました。

Groonga 6.0.4以前:

fuzzy_search(column, _key, {"max_distance": 2})

Groonga 6.0.5以降:

fuzzy_search(column, _key, 2)

query_expandコマンドの追加

今回のリリースでは、query_expandコマンドを追加しました。

Groongaにはクエリに含まれる同義語を展開してくれるプラグインがあります。QueryExpanderTSVを使うとそれができるのですが、展開した結果がどうなるか、事前に確認することはできませんでした。

もちろん、同義語はTSVで定義しているので、そちらの定義通りになるはずなのですが、きちんとGroonga側にそのTSVが反映されていることが確認できるというのが嬉しいポイントです。

クエリ展開を使っていて、どうもうまく検索できないというときは、まずquery_expandコマンドで期待通りに展開されるか確認してみてください。

query_expandは次のようにして使います。例えば、同義語のファイルの内容が次のとおりだとします。

% cat synonyms.tsv
# -*- coding: utf-8 -*-
#
# key[TAB]synonym1[TAB]synonym2[TAB]...
#
groonga groonga rroonga mroonga

きちんと展開されるか確認してみましょう。

> plugin_register query_expanders/tsv
[[0,1467092787.938153,0.0003046989440917969],true]
> query_expand QueryExpanderTSV groonga
[[0,1467092794.028075,0.0001063346862792969],"((groonga) OR (rroonga) OR (mroonga))"]

groongaが期待どおりに((groonga) OR (rroonga) OR (mroonga))というOR検索のクエリに展開されていることがわかります。

ソースからのビルド時間の短縮

今回のリリースでは、ソースからのビルド時間が短縮されました。 バイナリパッケージの提供されていない環境でGroongaを使おうとしている場合や、スナップショット版を試すために自分でソースからビルドしている場合には朗報ですね。他にもRroongaをインストールするときに開発パッケージをインストールしていない or 開発パッケージが提供されていない環境で使いたいときにも嬉しいですね。

ざっと試してみたところ、手元の環境(CPU:Core i5-4210U メモリ:8GB)でGroonga 6.0.4をビルドするのに、これまで11分程度かかっていたのが、Groonga 6.0.5では7分程度になりました。 新しいバージョンのUnicodeをサポートしやすくする過程で短縮ができました。ただし副産物としてバイナリサイズが少々増えています。

お知らせ

来月以降、以下のイベントが予定されています。Groongaで学ぶ全文検索は今週金曜日開催です。

興味があるイベントがあればぜひご参加ください!

さいごに

6.0.4からの詳細な変更点は6.0.5リリース 2016-06-29を確認してください。

それでは、Groongaでガンガン検索してください!