HAYASHI Kentaro
hayas****@clear*****
2013年 1月 29日 (火) 10:51:13 JST
林です。 今日は2013年最初の肉の日ですね。 groonga 2.1.2をリリースしました! http://groonga.org/ja/docs/news.html#release-2-1-2 今回のリリースの主なトピックは3つあります。 * 複数のquery()のサポート * groonga-tokenizer-mecabパッケージと同時に辞書のインストールをサポート * Fedora 18のサポート それぞれの環境毎のインストール方法はこちらを見てください。 http://groonga.org/ja/docs/install.html ○ 複数の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のパッケージの提供は行いません。 インストール手順は以下を参照してください。 http://groonga.org/ja/docs/install/fedora.html#fedora-18 ○ 変更点 さて、2.1.1からの変更点は以下の通りです。 http://groonga.org/ja/docs/news.html#release-2-1-2 2.1.2リリース - 2013/01/29 -------------------------- 改良 * 複数の query() を select コマンドでサポートしました。 例えば、キーワードごとに異なる重みづけを指定して検索するのに 'query("column * weight1", keyword1) || query("column * weight2", keyword2) || ...' などと --filter に指定することができます。 * 実験的機能であったビューを削除しました。 * grn_logger_reopen APIを追加しました。 grn_logger_info APIは非推奨となりました。 grn_logger APIを代りに使ってください。 * grn_default_logger_set_path() と grn_default_logger_get_path() APIを追加しました。 グローバル変数としての grn_log_path は削除しました。上記変数を使うにはAPIを使用してください。 * grn_default_query_logger_set_path() と grn_default_query_logger_get_path() APIを追加しました。 グローバル変数としての grn_qlog_path は削除しました。上記変数を使うにはAPIを使用してください。 * テーブル と ノーマライザー に関するドキュメントを追加。 * [deb][rpm] groonga-tokenizer-mecab パッケージのインストール時に必要な辞書を辞書をインストールするように改善した。 * 範囲検索を カラムインデックスによる関連テーブルをまたぐ検索 でもサポートした。 例えば、 'column1.column2...columnN <= "1988-01-04 00:00:00"' というように --filter に範囲を指定することができるようになります。 修正 * MeCabトークナイザーの共有オブジェクトが見つからなくてもエラーをログに記録しないようにした。 [groonga-dev,01174] [wingさんが報告] * [httpd] CentOS 5.4で SED 変数を明示的に設定することで、configureスクリプト実行が失敗しないようにした。 * 値を設定していない未初期化のベクタカラムの値を select コマンドで参照したときにクラッシュする不具合を修正した。 感謝 * wingさん -- HAYASHI Kentaro <hayas****@clear*****>