[groonga-dev,01042] [ANN] groonga 2.0.7

Back to archive index

HAYASHI Kentaro hayas****@clear*****
2012年 9月 29日 (土) 18:07:14 JST


林です。


今日は肉の日ですね。

groonga 2.0.7をリリースしました!
groonga2.0.7はgroonga 2.xのメンテナンスリリースです。
  http://groonga.org/ja/docs/news.html#release-2-0-7

今回のリリースの主なトピックは 3つあります。

* groonga-httpdでのPOSTによるloadコマンドのサポート
* サーバーパッケージ構成と使用ポートの見直し
* min/max関数のサポート

それぞれの環境毎のインストール方法はこちらを見てください。
  http://groonga.org/ja/docs/install.html

○ groonga-httpdでのPOSTによるloadコマンドのサポート

今回のリリースでは、POSTによるloadコマンドの実行をサポートしました。

実際の例を以下に示します。

サンプルで使うスキーマ定義:

  table_create --name Site --flags TABLE_HASH_KEY --key_type ShortText
  column_create --table Site --name title --type ShortText

http://localhost:10041/にアクセスするとブラウザベースの管理ツールを
使って上記スキーマ定義のSiteテーブルおよびtitleカラムを簡単に作成する
ことができます。

テーブルとカラムを作り終えたら、次にSiteテーブルへと登録しておきたいレコードをJSON形
式で用意します。(例としてファイル名はpostbody.txtとします。)

  ----postbody.txtの内容ここから----
  [
  {"_key": "site1", "title":"Web site1 title"}
  ]
  ----postbody.txtの内容ここまで----

登録データが準備できたので、curlコマンドを使ってPOSTリクエストをサーバーへと投げてみます。

  % curl -X POST 'http://localhost:10041/d/load?table=Site' \
    --verbose -H 'Content-Type: application/json' -d****@postb*****

実行すると以下のような結果が得られます。

  * About to connect() to localhost port 10041 (#0)
  *   Trying 127.0.0.1... connected
  > POST /d/load?table=Site HTTP/1.1
  > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
  > Host: localhost:10041
  > Accept: */*
  > Content-Type: application/json
  > Content-Length: 50
  > 
  * upload completely sent off: 50out of 50 bytes
  < HTTP/1.1 200 OK
  < Server: nginx/1.2.1
  < Date: Tue, 25 Sep 2012 05:38:24 GMT
  < Content-Type: application/json
  < Content-Length: 45
  < Connection: keep-alive
  < 
  * Connection #0 to host localhost left intact
  * Closing connection #0
  [[0,1348551504.38352,0.000763893127441406],1]%

postbody.txtの内容がPOSTによりloadできました。

○ サーバーパッケージ構成と使用ポートの見直し

今回のリリースではサーバーパッケージ構成と使用ポートの見直しを行いました。

従来サーバー用途では以下のHTTPサーバーパッケージのみ提供していました。

groonga-server (HTTPサーバー)
groonga-httpd (HTTPサーバー)

GQTPプロトコルで使うには不便ですし、デフォルトで使用するポートも
GQTPとHTTPで使用ポートがどちらも10041番ポートと衝突していました。

そこで、groonga-serverパッケージを分割し、プロトコルごとで異なるパッケージを
提供するようにしました。
使用するポート番号についても別のポート番号を割りあてるようにしました。
(HTTPは従来通り10041番ポート。GQTPを10043番ポートに割り当て変更。)

groonga-server-http (HTTPサーバー 10041ポート)
groonga-server-gqtp (GQTPサーバー 10043ポート)

注: groonga-server-httpパッケージとgroonga-httpdパッケージは
    いずれかのみインストールすることができます。

○ min/max関数のサポート

今回のリリースではminおよびmax関数をサポートしました。

min関数は与えられた引数のうち最小のものを返し、
max関数は与えられた引数のうち最大のものを返します。

これら関数のサポートにより、検索結果が条件に合致する度合いを示す
スコアが極端に高かったり、もしくは低くなってしまった場合に検索結果を
調整することができるようになります。

具体例をmin関数を使ったサンプルで示します。

サンプルで使うスキーマ定義:

  table_create --name Site --flags TABLE_HASH_KEY --key_type ShortText
  column_create --table Site --name title --type ShortText
  column_create --table Site --name point --type Int8

  table_create --name Terms --flags TABLE_PAT_KEY|KEY_NORMALIZE --key_type ShortText --default_tokenizer TokenBigram
  column_create --table Terms --name blog_title --flags COLUMN_INDEX|WITH_POSITION --type Site --source title

サンプルで使うためのデータ登録:

  load --table Site
  [
  {"_key":"http://example.org/","title":"This is test record 1!","point":1},
  {"_key":"http://example.net/","title":"test record 2.","point":2},
  {"_key":"http://example.com/","title":"test test record three.","point":3},
  {"_key":"http://example.net/afr","title":"test record four.", "point":4},
  {"_key":"http://example.org/aba","title":"test test test record five.","point":5},
  {"_key":"http://example.com/rab","title":"test test test test record six.","point":0},
  {"_key":"http://example.net/atv","title":"test test test record seven.","point":7},
  {"_key":"http://example.org/gat","title":"test test record eight.","point":8},
  {"_key":"http://example.com/vdw","title":"test test record nine.","point":9},
  ]

例えば、指定した語句(test)をカラムtitleに含むテキストの全文検索を行うことを考え
ます。個々のデータには重要度(point)があらかじめ与えられているとします。

単純に指定した語句(test)にマッチするものが多いデータをソート(スコアが同じなら重要度で降順)して
取得するならば以下のクエリで取得できます。

  % select --table Site --query title:@test --output_columns _id,_score,title,point  --sortby -_score,-point

  ["_id","UInt32"],["_score","Int32"],["title","ShortText"],["point","Int8"]
  [6,4,"test test test test record six.",0],
  [7,3,"test test test record seven.",7],
  [5,3,"test test test record five.",5],
  [9,2,"test test record nine.",9],
  [8,2,"test test record eight.",8],
  [3,2,"test test record three.",3],
  [4,1,"test record four.",4],
  [2,1,"test record 2.",2],
  [1,1,"This is test record 1!",1]

ただし、これだと重要度が低い"test test test test record six."がトップに来ます。
マッチするのは重視したいけれども、それほど高いスコアを与えると望ましい結果にならないときに
調整するのに使えるのが、min関数です。

groongaではスコアを_scoreカラムに保持しています。
そこで、min関数を使って極端に高いスコアにならないようにします。

  % select --table Site --query title:@test --output_columns _id,_score,title,point \
      --scorer '_score = min(_score, 3) --sortby -_score,-point

  ["_id","UInt32"],["_score","Int32"],["title","ShortText"],["point","Int8"]
  [7,3,"test test test record seven.",7],
  [5,3,"test test test record five.",5],
  [6,3,"test test test test record six.",0],
  [9,2,"test test record nine.",9],
  [8,2,"test test record eight.",8],
  [3,2,"test test record three.",3],
  [4,1,"test record four.",4],
  [2,1,"test record 2.",2],[1,1,"This is test record 1!",1]

すると、マッチしているものを重視しつつ、設定済みの重要度も考慮した結果を得ることができるように
なります。

○ 変更点

さて、2.0.6からの変更点は以下の通りです。
  http://groonga.org/ja/docs/news.html#release-2-0-7

2.0.7リリース - 2012/09/29
--------------------------

改良

    * [doc] --query_flags の説明を追加。
    * [doc][httpd] gzip圧縮についての設定サンプルを追加。
    * [httpd][rpm][centos] groonga-httpd initスクリプトを追加。
    * [rpm] logrotateの設定ファイルを追加。
    * インストール中のデータベース作成をサポート。
    * [httpd] groonga_database_auto_create ディレクティブをサポート。
    * 集合演算でのスコアのマージをサポート。 [GitHub#31]
    * [httpd] POSTによる load コマンドをサポート。
    * 一時結果テーブルを作成する際のエラーチェックを追加。 [GitHub#33]
    * GQTP サーバーパッケージを追加。
    * max() 関数を追加。
    * min() 関数を追加。

修正

    * load コマンド実行時にベクタ要素へ主キー値の属する型情報を設定するように修正した。 [GitHub#30]
    * [httpd] NULLでの初期化漏れを修正した。 [@Kiskeさんが報告]
    * [httpd] content_type_len のサイズ設定漏れを修正した。
    * [rpm][fedora] groonga.service で --bind-address を使うように修正した。
    * 不適切なフィルタの引数によリクラッシュする問題を修正した。 [GitHub#32]
    * Time型からTime型へのキャストで値が壊れる不具合を修正。
    * Time型からFloat型へのキャストで値が壊れる不具合を修正。

感謝

    * @Kiskeさん

-- 
HAYASHI Kentaro <hayas****@clear*****>




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