今日は2013年最初の肉の日ですね。
groonga 2.1.2リリース
groonga 2.1.2 をリリースしました!
今回のリリースの主なトピックは3つあります。
- 複数のquery()のサポート
- groonga-tokenizer-mecabパッケージと同時に辞書のインストールをサポート
- Fedora 18のサポート
それぞれの環境毎のインストール方法: インストール
複数のquery()のサポート
今回のリリースでは、従来 --match_columns
と --query
とで個別に指定していたカラムとキーワードを --filter
にquery()を使うことで、まとめて指定することができるようになりました。
ユーザ情報のテーブルのnameカラムからaliceを全文検索するクエリを例として示します。(nameカラムで合致したデータに対する重みづけとして10を指定します)
例で使うテーブルのスキーマは以下の通りです。
table_create Users TABLE_NO_KEY
column_create Users name COLUMN_SCALAR ShortText
column_create Users memo COLUMN_SCALAR ShortText
table_create Lexicon TABLE_HASH_KEY ShortText
--default_tokenizer TokenBigramSplitSymbolAlphaDigit
--normalizer NormalizerAuto
column_create Lexicon users_name COLUMN_INDEX|WITH_POSITION Users name
column_create Lexicon users_memo COLUMN_INDEX|WITH_POSITION Users memo
例で使うテーブルのデータは以下の通りです。
load --table Users
[
{"name": "Alice", "memo": "groonga user"},
{"name": "Alisa", "memo": "mroonga user"},
{"name": "Bob", "memo": "rroonga user"},
{"name": "Tom", "memo": "nroonga user"},
{"name": "Tobby", "memo": "groonga and mroonga user. mroonga is ..."},
]
従来通り --match_columns
と --query
を組みあわせることで、以下のように書けます。(nameカラムに対し重みづけを行っています)
select Users
--output_columns name,_score
--match_columns "name * 10"
--query alice
これをquery()を使うことで --filter
にまとめて書くことができるようになります。
select Users
--output_columns name,_score
--filter 'query("name * 10", "alice")'
これだけだとあまりありがたみがないかも知れません。ではいくつかキーワードが与えられていて、そのキーワードに異なる重みづけをして全文検索を行いたいときにはどうなるでしょうか。
--query
と --match_columns
の組み合わせの場合、個々のキーワードに対しての重みづけはできません。
select Users
--output_columns name,memo,_score
--match_columns "memo * 10" --query "memo:@groonga OR memo:@mroonga OR memo:@user"
--sortby -_score
一方、query()関数を使うと、個別のキーワードについて重みづけを行うことができます。
select Users
--output_columns name,memo,_score
--filter 'query("memo * 10", "groonga") || query("memo * 20", "mroonga") || query("memo * 1", "user")'
--sortby -_score
最初のクエリの結果ではgroongaもmroongaも等価ですが、
[
["name","ShortText"],["memo","ShortText"],["_score","Int32"]
],
["Tobby","groonga and mroonga user. mroonga is ...",4],
["Alice","groonga user",2],
["Alisa","mroonga user",2],
["Bob","rroonga user",1],
["Tom","nroonga user",1]
次のクエリの結果では重みづけを行っているのでmroongaがより上位に来ていることがわかります。
[
["name","ShortText"],["memo","ShortText"],["_score","Int32"]
],
["Tobby","groonga and mroonga user. mroonga is ...",51],
["Alisa","mroonga user",21],
["Alice","groonga user",11],
["Tom","nroonga user",1],
["Bob","rroonga user",1]
このようにquery()を使うことで、より望ましい検索結果を得られるようになりました。
groonga-tokenizer-mecabパッケージと同時に辞書のインストールをサポート
今回のリリースでは、groonga-tokenizer-mecabのインストール時にまだMeCabの辞書がインストールされていない場合、一緒にインストールするようにしました。
以下の手順で、groonga-tokenizer-mecabをインストールするとMeCabの辞書がインストールされます。
Debian/Ubuntuの場合::
% sudo apt-get install -y groonga-tokenizer-mecab
CentOS/Fedoraの場合::
% sudo yum install -y groonga-tokenizer-mecab
従来、MeCabの辞書についてはどの辞書を使うかについてユーザさんの選択にまかせていたため、特に依存関係をパッケージに含めていませんでしたが、groongaのインストールで初めてMeCabをインストールする場合の利便性を考慮してこのようにしました。
なお、すでにMeCabの辞書をインストールしている場合にはそのままインストール済みの辞書を使うようになっています。
Fedora 18のサポート
今回のリリースでは2013/01/15にリリースされたFedora 18のサポートを追加しました。 Fedora 18のサポートに伴ない、Fedora 17のパッケージの提供は行いません。
インストール手順は Fedora 18 を参照してください。
さいごに
2.1.1からの詳細な変更点は 2.1.2リリース 2013/01/29 を確認してください。
それでは、groongaでガンガン検索してください!