[groonga-dev,03520] [ANN] Groonga 5.0.8

Back to archive index

Kouhei Sutou kou****@clear*****
2015年 9月 29日 (火) 13:08:51 JST


須藤です。

今日は肉の日ですね!

Groonga 5.0.8をリリースしました!

  http://groonga.org/ja/blog/2015/09/29/release.html

今回のリリースの主なトピックは次の2点です。

  * 一時テーブルにカラムを追加できるようになった
  * HTTP/2対応

○ 一時テーブルにカラムを追加できるようになった

まだ、Groongaを全文検索サーバーとして使っているユーザーには
目に見えるメリットはないのですが、今後の改良で重要になる機能
が追加されました。それが一時テーブルにカラムを追加できる機能
です。

今後、どのようなメリットがありそうかいくつか紹介します。

selectのoutput_columnsで出力値に名前をつけることができるよう
になります。SQLでいう「AS alias_name」機能です。

今は、output_columnsに

  * snippet_html(title)と
  * snippet_html(body)

を指定するとどちらも出力名が「snippet_html」になってしまいま
す。これを、snippet_html_title、snippet_html_bodyのように区
別できるようになります。

selectのsortby・selectのdrilldownでカラム値そのものではなく、
カラム値を加工した値でソート・ドリルダウンできるようになりま
す。

たとえば、Time型のカラムの値を加工して曜日にし、曜日でドリル
ダウンできます。今は、別の曜日カラムを用意し、loadするときに
曜日を計算し、それを使ってドリルダウンする必要があります。
(動的に計算する方が便利ですが、事前に曜日カラムを用意した方
が速いので、今のやり方を使うケースもあるでしょう。)

Mroongaのラッパーモードでトランザクション対応ストレージエン
ジン(たとえばInnoDB)をラップしているとき、ロールバックして
もインデックスが壊れないようにできます。トランザクション内で
の変更を一時テーブルとカラムに保存しておき、コミットされたと
きはそのデータを実際のテーブルに反映、ロールバックされたとき
は単純に破棄することができるからです。

○ HTTP/2対応

GroongaはHTTPを話せる全文検索サーバー機能を提供しています。
この機能の実装は2つあり、1つはGroonga独自のHTTPサーバー実装
(groonga --protocol http)で、もう1つはnginxモジュールでの
実装(groonga-httpd)です。このうち、nginxモジュールでの実装
でHTTP/2を使えるようになりました。

先日リリースされたnginx 1.9.5から実験的な機能としてHTTP/2が
サポートされています。Groongaはnginxをバンドルしてリリースし
ていますが、バンドルしているnginxのバージョンを1.9.5にし、
HTTP/2を有効にしてビルドするようにしています。

groonga-httpd.confを次のように変更することでHTTP/2でGroonga
を使うことができます。

http {
  server {
    # listen 10041;
    listen 10041 http2; # <- http2を追加

    # ...
  }
}

HTTP/2を使うと、通信量が削減され、スループットがあがる可能性
があります。(計測していませんが。。。)

○ おしらせ

今週は次のイベントがあります。Groongaに興味のある方はぜひお
越しください。

  * Groonga新リリース自慢会 5.0.8
    * https://groonga.doorkeeper.jp/events/31904
    * 今夜19:30から秋葉原で。
  * Groongaで学ぶ全文検索 2015-10-02
    * https://groonga.doorkeeper.jp/events/31859
    * 今週金曜19:30から大塚で。

○ お願い

Windowsでのスパースファイルの有効性の検証を協力してくれる方
を引き続き待っています!

  https://github.com/groonga/groonga/issues/384

○ 変更点一覧

http://groonga.org/ja/docs/news.html#release-5-0-8

改良
^^^^

  * [Windows] MySQLにバンドルしてビルドできるようになりまし
    た。(一時できない時期がありました。)

  * [スクリプト構文] マッチ演算子 や 等価演算子 のような述語
    演算(真偽値を返す演算)が Int32 ではなく Bool の値を返
    すようになりました。

  * [API] GRN_PTR バルク・ GRN_PVECTOR バルクが参照する
    grn_obj の所有権を持てるようになりました。 GRN_OBJ_OWN
    フラグを GRN_PTR バルク・ GRN_PVECTOR バルクに指定すると、
    自身が解放されるときに参照している grn_obj を
    grn_obj_close() します。

  * [非互換][正規表現] マッチ前にマッチ対象のテキストを正規
    化するようにしました。これは一貫性と性能のためです。

    前方一致検索演算子 のように他の演算は対象のテキストを正
    規化しています。

    \Ahello のようにシンプルな正規表現はインデックスを使って
    評価できます。インデックスを使うと速いです。

    もし、マッチ対象のテキストが正規化されていないと、
    \A[Hh]ello や \A(?i)hello といった複雑な正規表現を書かな
    いといけません。複雑な正規表現はインデックスを使って評価
    できません。マッチ対象のテキストが正規化されていると、シ
    ンプルな正規表現を使うことができます。シンプルな正規表現
    はインデックスを使って評価できるかもしれません。インデッ
    クスを使えると速いです。

  * [ドキュメント] ドキュメントを改善しました。
    [GitHub#396][GitHub#397][GitHub#399][GitHub#403]
    [GitHub#405][GitHub#409]
    [佐藤博之さんが報告][佐藤博之さんがパッチ提供]

  * [highlight_html] 性能を改善しました。
    [groonga-dev,03427] [佐藤博之さんが報告]

  * [snippet_html] 性能を改善しました。

  * [CMake] 2回同じ pkg-config を実行しないようにしました。
    [Sergei Golubchikさんがパッチ提供]

  * 時刻に対するチェックのうち、「年」に対する不要なチェック
    を削除しました。この変更前は紀元前は常に不正な時刻でした。
    この変更後は、システム( mktime() )が紀元前をサポートし
    ていれば、紀元前の時刻も妥当な時刻になります。

  * [grn_ctx_is_opened()] 指定したIDのオブジェクトが開かれて
    いるかどうかをチェックするAPIを追加しました。

  * [grn_obj_remove()] 最大メモリー使用量を減らしました。
    grn_thread_get_limit() が 1 を返す場合、一時的に開いたオ
    ブジェクトを処理が終わったら閉じるようになります。

  * [ドキュメント][table_remove] 説明を増やしました。

  * [groonga executable file] スタンドアローンモードのときは
    dump の結果の最後に改行を追加するようにしました。

  * [Process log] grn_init のログにGroongaのバージョンを入れ
    るようにしました。

  * Gitterにチャットルーム をオープンしました。
    * https://gitter.im/groonga/public

  * [status] 一貫性のために、 starttime の別名として
    start_time を追加しました。他のキーは snake_case スタイ
    ルの名前になっていたのです。 starttime は非推奨になりま
    した。代わりに start_time を使ってください。

  * バンドルしている鬼雲を更新しました。

  * [ドキュメント][scorer_tf_at_most] ドキュメントを追加しました。

  * 一時テーブルに対するカラムをサポートしました。今のところ
    C APIからしか使うことはできません。次のリリースでは
    select はこの機能を活用する予定です。

  * [grn_vector_pop_element()] 公開しました。

  * [groonga executable file] ロック獲得に成功したかどうかを
    チェックするようにしました。

  * [groonga-suggest-create-dataset] KEY_NORMALIZE ではなく
    --normalizer を使うようにしました。なぜなら、
    KEY_NORMALIZE は非推奨になっているからです。

  * [grn_obj_cast()] 公開しました。

  * [実験的][grn_ii_cursor] 公開ました。

  * [実験的][grn_ii_cursor_open()] 公開しました。

  * [実験的][grn_ii_cursor_next()] 公開しました。

  * [実験的][grn_ii_cursor_close()] 公開しました。

  * [マッチ演算子] インデックスの検出方法を改善しました。トー
    クナイザー付き語彙表に作られているインデックスを優先しま
    す。

  * [groonga-httpd] バンドルしているnginxを1.9.5に更新しまし
    た。1.9.5はHTTP/2をサポートしています。HTTP/2モジュール
    は有効になっています。

修正
^^^^

  * [スクリプト構文] 右辺が true のとき &! が動いていない問題を修正しました。

  * libtool 2.4.6を使うと性能劣化する問題を修正しました。
    [GitHub#406][GitHub#407] [佐藤博之さんがパッチ提供]

  * [等価演算子] セクションが無視される問題を修正しました。

感謝
^^^^

  * 佐藤博之さん
  * Sergei Golubchikさん


-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/>

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
  http://www.clear-code.com/recruitment/
コードリーダー育成支援 - 自然とリーダブルコードを書くチームへ:
  http://www.clear-code.com/services/code-reader/




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