[groonga-dev,01181] [ANN] groonga 2.1.2

Back to archive index

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*****>




groonga-dev メーリングリストの案内
Back to archive index