[groonga-dev,01445] [ANN] groonga 3.0.4

Back to archive index

HAYASHI Kentaro hayas****@clear*****
2013年 5月 29日 (水) 11:54:23 JST


今日は肉の日ですね。

まずはじめに、利用事例の記事を書いてくれる人募集のお知らせです。

  これまでも、groonga.orgにて利用事例 http://groonga.org/ja/users/ を
  紹介してきましたが、それとは別に、http://gihyo.jp/にてgroonga関連の記事の連載を
  隔週連載groongaとしてはじめました。
  まだgroongaを知らない人にもWebの連載記事を通じて知ってもらいたいというのが動機です。
  現在第4回まで公開しています。

    http://gihyo.jp/dev/clip/01/groonga

    * 第1回 全文検索エンジンgroongaを紹介します!
      http://gihyo.jp/dev/clip/01/groonga/0001
    * 第2回 groongaをRuby On Railsでも使ってみた 〜chikamap.comの事例から
      http://gihyo.jp/dev/clip/01/groonga/0002
    * 第3回 すべてのMySQLユーザに高速な全文検索機能を! - mroongaの紹介
      http://gihyo.jp/dev/clip/01/groonga/0003
    * 第4回 rroongaを使ったソースコード検索エンジンMilkode
      http://gihyo.jp/dev/clip/01/groonga/0004

  利用事例がつきたら終了なので、実際に使っているユーザーのみなさんに
  利用事例を書いてもらえたらいいなぁと思っています!
  詳細は「groonga普及のための協力のお願い」を参照してください。

    http://sourceforge.jp/projects/groonga/lists/archive/dev/2013-February/001186.html

  似たような動機で、毎週木曜にQiitaでのgroonga関連の情報提供も続けています。
  こちらも参考にどうぞ。

    http://qiita.com/users/groonga


groonga 3.0.4をリリースしました!
  http://groonga.org/ja/docs/news.html#release-3-0-4

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

今回のリリースではデータベースのファイル形式は互換性があるのでデータベースを作りなおす必要はありません。

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

* match_columnsにてマルチセクション対応のインデックス指定をサポート
* tokenizeコマンドのサポート
* Debian 8.0 (jessie)のサポート
* APIドキュメント化始めました
* 週刊groongaの翻訳始めます

○ match_columnsにてマルチセクション対応のインデックス指定をサポート

今回のリリースでは、match_columnsにてマルチセクションに対応するインデックス
指定をサポートしました。

例えば、titleカラムとcontentカラムを含むテーブルMemosに対して
カラムごとに重みづけをして検索するときのことを考えてみましょう。

以下のようなスキーマ定義となるでしょう。

  table_create Memos TABLE_NO_KEY
  column_create Memos title COLUMN_SCALAR ShortText
  column_create Memos content COLUMN_SCALAR ShortText

  table_create Lexicon TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram
  column_create Lexicon title_index COLUMN_INDEX|WITH_POSITION|WITH_SECTION Memos title
  column_create Lexicon content_index COLUMN_INDEX|WITH_POSITION|WITH_SECTION Memos content

語彙表であるLexiconテーブルにマルチカラムインデックスを張ったとします。
titleを重視したい場合のクエリは以下のようになるでしょう。

  select Memos \
    --match_columns "Lexicon.title_index * 10 || Lexicon.content_index" \
    --query rroonga --output_columns "title, content, _score"

同等のことをマルチカラムインデックスに対してもできるようになりました。

そのためには以下のようにスキーマ定義を変更します。

  table_create Lexicon TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram
  column_create Lexicon memo_index COLUMN_INDEX|WITH_POSITION|WITH_SECTION Memos title,content

そして、クエリでmemo_indexのあとに.(カラム名)を指定します。
同等のことが以下のクエリで実現できるようになりました。

  select Memos \
    --match_columns "Lexicon.memo_index.title * 10 || Lexicon.memo_index.content" \
    --query rroonga \
    --output_columns "title, content, _score"

テーブルに複数の全文検索対象のカラムがある場合、マルチカラムインデックスを
張るというのはよくあります。

また、カラムに複数のトークナイザーやノーマライザーを適用し、
検索のときに使用するインデックスを切り替えたいということがあります。

そういった場合に単純にカラム名を指定すると、複数のインデックスを使って
しまい意図しない検索となることがあります。
今回のリリースでカラムがマルチカラムインデックスの構成要素であった場合に、
明示的に指定できるようになりました。

○ tokenize コマンドのサポート

今回のリリースでは、tokenizeコマンドのサポートを追加しました。

これまで、groongaでノーマライザーの挙動を確認するためのコマンドとして
normalizeコマンドはあったのですが、トークナイザーの挙動を確認するための
コマンドが提供されていませんでした。

今回、tokenizeコマンドを追加したことでノーマライザー、トークナイザー両
方の挙動を確認することができ、意図しない検索結果となった場合の問題の切
り分けがより簡単にできるようになりました。

tokenizeコマンドは以下のようにして使います。

tokenizeコマンドには4つの引数がありますが、必須なのはトークナイザーと
対象となる文字列の2つです。

例えば、TokenBigramトークナイザーで"groonga3.0.4"という文字列を
トークナイズすると以下のようになります。

> tokenize TokenBigram "groonga3.0.4"
[
  [0,1369290009.77065,0.000670194625854492],
  [
    {"value":"gr","position":0},
    {"value":"ro","position":1},
    {"value":"oo","position":2},
    {"value":"on","position":3},
    {"value":"ng","position":4},
    {"value":"ga","position":5},
    {"value":"a3","position":6},
    {"value":"3.","position":7},
    {"value":".0","position":8},
    {"value":"0.","position":9},
    {"value":".4","position":10},
    {"value":"4","position":11}
  ]
]

tokenizeコマンドの詳細はドキュメントを参照してください。

  http://groonga.org/ja/docs/reference/commands/tokenize.html

もうすでに、開発版のtokenizeコマンドを使って実際の挙動を検証してくれて
いるブログがありますので合わせて紹介します。

Y-Ken Studio はてブロ支店
  「groonga/mroongaの分かち書き機能(tokenizer)の挙動を追ってみる」
  http://y-ken.hatenablog.com/entry/mroonga-tokenizer-behavior

Y.Kentaroさんはmysql-mroongaカテゴリで他にも有益な情報をまとめて
くれているので、参考にしてみてください。
  http://y-ken.hatenablog.com/category/mysql-mroonga

○ Debian 8.0 (jessie)のサポート

今回のリリースでは Debian 8.0 (jessie)のサポートを追加しました。

これまでtestingであったwheezyが安定版としてリリースされたことによるものです。

インストール手順はドキュメントを参照してください。

  http://groonga.org/ja/docs/install/debian.html#jessie

○ APIドキュメント化始めました

長い間懸案であった、groongaのAPIをドキュメント化する作業を始めました。

APIのドキュメントがないので、groongaをライブラリとして使おうとした
ときにはソースを直接参照しないといけません。

もう一つの理由として、mroongaをMariaDBにバンドルできるようにする作業を進めているの
ですが、現状groongaのヘッダに日本語で説明を書いているせいで、Visual Studioでビル
ドするときに大量の警告メッセージを吐くというのがあります。
その状態でバンドルしてもらうのは難しいので、ヘッダから日本語を追い出すことで
問題を解消したいなぁというのがあります。

上記からドキュメント化の作業を始めたわけですが、現状リソースがまったく足りていません。

そこで、ユーザのみなさんにも協力していただけたらいいなと思っています。
MariaDBへのバンドルを応援したいという人はドキュメント化作業に参加して
くれると嬉しいです。

では具体的にどんなことをやればいいのかを説明します。
基本的には関数ごとにpull requestを送ってもらうと進めやすいです。

1. groongaとgroonga.orgのリポジトリをcloneして以下のコマンドを実行します。
   % git clone git://github.com/groonga/groonga.git
   % git clone git://github.com/groonga/groonga.org.git
   % cd groonga
   % ./autogen.sh
   % ./configure --enable-document --with-groonga-github-com=(groonga.orgをcloneしたパス)
2. include/groonga.hを眺めて日本語のコメントがついている
   関数を一つ探します。例:grn_ctx_open
3. 関数が見つかったら、関数に対応するブランチをつくります。
   % git checkout -b grn-ctx-open
4. 関数のコメントの内容をdoc/source/reference/api/grn_ctx.txtに移動します。
   移動するときに英訳とマークアップを行います。
   grn_ctx.txtにはすでにgtn_ctx_initの例があるのでそれを真似して下さい。
5. groonga.hからはコメントを削除します。
6. 対象となるファイルを更新するために以下を実行します。
   % make update-files を実行します
7. メッセージカタログを更新するために以下を実行します。
   % make update-po
8. ドキュメントを生成するために以下を実行します。
   % make update-document
9. ドキュメントの生成結果を見て翻訳されていない部分を修正します。
   doc/locale/ja/LC_MESSAGES/po以下のメッセージカタログの
   msgstrを修正することになります。
10. 英語のドキュメントと日本語のドキュメントがきちんと生成できたら
   コミットしておきます。
11. 完成です。pull requestを送りましょう。

HTMLの結果を確認するにはdoc/locale/en/htmlもしくはdoc/locale/ja/html
以下を参照してください。

○ 週刊groonga翻訳始めます

毎週木曜に Qiita http://qiita.com/ にてgroongaやmroonga,rroongaなどの
トピックを一つ投稿するという取り組みを続けています。

それなりにトピックがたまってきたので、これを翻訳して英語圏にも情報を発信して
いこうかと考えています。

ただ、現状リソースがあまり足りていないので、ユーザのみなさんにも
協力していただけたらいいなと思っています。

具体的には以下のようにして作業をすすめていきたいと思います。

1. Qiitaに英語圏向けのノウハウ・Tipsの投稿ページを元記事を複製して用意する
   (この時点では内容は日本語のまま)
   http://qiita.com/items/XXXXXXXXXXXXXXXXXXXX
2. 記事ページをみんなでよってたかって翻訳する
   このときには「編集リクエスト」を使って記事を更新します。
   http://blog.qiita.com/post/40808687185/patch-request-release
3. 記事の翻訳が完成したら、内容に応じてblogroongaやmroongaブログに掲載します。
   blogroonga http://groonga.org/blog/
   mroonga blog http://mroonga.org/blog/
4. Tumblrでリブログ

1,3,4はgroonga開発チームでやるとして、2.のところを手分けして実現できたら
いいなぁと思っています。

○ 変更点

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

3.0.4リリース - 2013/05/29
-------------------------

改良

  * geo_in_circle の引数に _key が使えるようにしました。[@ceekzさんが報告]
  * groongaをライブラリとして使うときに、ベクタカラムのキャストをサポートしました。
  * Ubuntu 11.10 (Oneiric Ocelot)のサポートをやめました。
  * match_columns にてマルチセクション対応のインデックス指定をサポートしました。
  * tokenize コマンドをサポートしました。
  * mmap() が失敗したときのシステムエラーメッセージの表示をサポートしました。
  * [doc][windows] ビルド手順を "cmake --build" でできるように簡略化しました。
  * サービススクリプトが応答しなくならないように最大実行時間を制限するようにしました。
    [GitHub#61] [firewoodさんが報告]
  * ベクタを真偽値として評価できるようにしました。この変更で空のベクタはfalseとして評価されるようになります。
  * 不要なログメッセージを何度も出さないようにしました。
    不要なログメッセージは"(N same messages are truncated)"として省略されるようになります。
  * [munin][groonga_n_records] exclude_tables オプションを追加しました。
    これによりモニタリング結果から特定のテーブルを除去することができます。
  * Debian 8.0 (jessie)をサポートしました。
  * プラグインのディレクトリパスを除去することでデータベースファイルの
    ポータビリティを改善しました。


修正

  * [tokenizer] エラー時のメモリリークを修正しました。
  * 空の文字列による類似検索がSEGVを引き起す不具合を修正しました。[groonga-dev,01346] [中井さんが報告]
  * "VECTOR_COLUMN != xxx", "VECTOR_COLUMN && xxx" といった式が使われたときに
    メモリリークする問題を修正しました。
  * SIGSTOPとSIGCONTによりgroongaサーバが停止してしまう不具合を修正しました。
  * ノーマライザーがノーマライズ済み文字列としてNULLを返したときに
    クラッシュする不具合を修正しました。 [Y.Kentaroさんが報告]
  * デーモン化する課程が OS Xでは動作しない不具合を修正しました。
    [groonga-dev,01440] [小西さんが報告]
  * [deb] HTTP/GQTPプロセスがroot権限で実行されてしまう不具合を修正しました。[@orangainさんが報告]

感謝

  * @ceekzさん
  * 中井さん
  * firewoodさん
  * Y.Kentaroさん
  * 小西さん
  * @orangainさん

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




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