BloGroonga

2013-01-29

今日は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でガンガン検索してください!