[groonga-dev,01511] [ANN] groonga 3.0.5

Back to archive index

HAYASHI Kentaro hayas****@clear*****
2013年 6月 29日 (土) 12:18:54 JST


今日は肉の日ですね。

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

  これまでも、groonga.orgにて利用事例 http://groonga.org/ja/users/ を
  紹介してきましたが、それとは別に、http://gihyo.jp/にてgroonga関連の記事の連載を
  隔週連載groongaとしてはじめました。
  まだgroongaを知らない人にもWebの連載記事を通じて知ってもらいたいというのが動機です。
  現在第6回まで公開しています。先月は第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
    * 第5回 Rubyでサーバ要らずの高速全文検索! - rroongaの紹介
      http://gihyo.jp/dev/clip/01/groonga/0005
    * 第6回 [実録] MySQL向け全文検索エンジン「Tritonn」から「mroonga」への移行ガイド(1)
      http://gihyo.jp/dev/clip/01/groonga/0006

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

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

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

    http://qiita.com/groonga


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

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

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

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

* output_columnsでシングルクォートした文字列をサポート
* html_untag関数のサポート
* APIドキュメント化始めました(引き続き募集中)
* 週刊groonga翻訳始めました(引き続き募集中)

○ output_columnsでシングルクォートした文字列をサポート

今回のリリースではoutput_columnsでシングルクォートした文字列をサポートしました。

groonga 3.0.2から、--output_columns で複雑な文字列の連結をサポートしました。
これは例えば、titleというカラムがあるとして、 '"<" + title + ">"' など
とすると "<(ここにtitleカラムの内容)>" というようにカラムの内容をちょっ
と加工して出力するという用途に使える機能です。

ただし、シングルクォートをサポートしていなかったので、クォートではまることがあ
りました。

以下の例で、今回のリリースからできるようになった記述を紹介します。

  table_create Entries TABLE_NO_KEY
  column_create Entries title COLUMN_SCALAR ShortText

  load --table Entries
  [
   {"title": "Single quote and double quote"}
  ]

3.0.4までだと "<(ここにtitleカラムの内容)>" というのを実現するには
以下の方法がありました。

  select Entries --output_columns '_id, "<" + title + ">"' --command_version 2
  select Entries --output_columns "_id, \"<\" + title + \">\"" --command_version 2

今回のリリースではシングルクォートをサポートしたので以下のように書けるようになります。

  select Entries --output_columns "_id, '<' + title + '>'" --command_version 2

また、3.0.4では処理できなかった(結果が空になる)、以下のようなシングルクォートやダブル
クウォートを含む場合も正しく処理できるようになりました。

  # <"(titleカラムの内容)">
  select Entries --output_columns "_id, '<\"' + title + '\">'" --command_version 2
  #=> [1,"<\"Single quote and double quote\">"]

  # <'(titleカラムの内容)'>
  select Entries --output_columns "_id, '<\\'' + title + '\\'>'" --command_version 2
  #=> [1,"<'Single quote and double quote'>"]

○ html_untag関数のサポート

今回のリリースではHTMLタグを除去するためのhtml_untag関数を実験的にサポートしました。

例えば、Webサイトのスクレイピング結果をそのままgroongaデータベースに保存している
ような場合を考えてみます。

以下のようなスキーマにスクレイピング結果を格納しているとしましょう。

  table_create WebClips TABLE_NO_KEY
  column_create WebClips url COLUMN_SCALAR ShortText
  column_create WebClips content COLUMN_SCALAR ShortText
  column_create WebClips tag COLUMN_VECTOR ShortText
    
サンプルデータを以下のようにして投入します。

  load --table WebClips
  [
  {"url": "http://groonga.org", "tag": ["groonga"], "content": "groonga is <span class='emphasize'>fast</span>"},
  {"url": "http://mroonga.org", "tag": ["mroonga"], "content": "mroonga is <span class=\"emphasize\">fast</span>"},
  ]

html_untagには対象となるカラムを指定します。今回はcontentカラムからHTMLタグを除去した
結果が欲しいので、html_untag(content)となります。
実行してみましょう。

  select WebClips --output_columns "html_untag(content)" --command_version 2

  [[2],
    [
      ["html_untag", "null"]
    ],
    ["groonga is fast"],
    ["mroonga is fast"]
  ]

class属性つきのspanタグが除去されているのがわかります。

この関数を使うときには--command_version 2を必ず指定してください。
指定しないと意図通りの結果を得られません。

html_untagが導入された背景にはスクレイピングした結果をgroongaのデータベースへと保存した状態で
検索したいというのがあります。
ただしそのままではタグが邪魔なので、タグを除去するhtml_untagをサポートしました。
html_untagは単体で使って嬉しいというよりも、snippet_htmlと組み合わせることを(将来的に)想定しています。

具体的には検索結果からHTMLを除去し、ハイライトしたい部分だけsnippet_htmlで加工するというのがあります。

元のHTML -(html_untag)-> テキスト -(snippet_html)-> 必要な部分だけタグ付け

まだ、html_untagの結果をsnippet_htmlでそのまま処理することはできませんが、
将来的には対応を予定しています。

○ 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/groonga/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.のところを手分けして実現できたら
いいなぁと思っています。

まずは、「groongaでキーワードごとに重み付けをして検索するには」の翻訳から
はじめていきます。作業対象の投稿は以下の通りです。

  http://qiita.com/groonga/items/43a4cc07512c63193a07

○ 変更点

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

3.0.5リリース - 2013/06/29
-------------------------

改良

  * [doc] match_column と query() の query_string 引数のサマリを追加しました。
  * subrecordの情報をテーブルのインスペクション時に表示するようにしました。
  * シングルクォートした文字列を output_columns でもサポートしました。
    これは "XXX, '...'" といった表現がサポートされたことを意味しています。
  * [doc] groongaサーバーを起動する際のroot権限と使用ポートに関する注意を追加しました。
    [浅見さんが報告]
  * [実験的] html_untag 関数を追加しました。

修正

  * テーブル作成時に必要なロックをかけていないことでmroongaがクラッシュする
    不具合を修正しました。 [Y.Kentaroさんが報告]
  * ClangやGCCによるコンパイル時の警告を抑制するように修正しました。
  * "XXX && sub_filter(...)" という表現をすると sub_filter(...) が
    無視される不具合を修正しました。
  * 間違ったタグ名がXMLの出力で使われる不具合を修正しました。
    この不具合は output_columns で "REFERENCE_VECTOR_COLUMN._key"
    という表現をすると影響を受けます。参照カラムがXMLの出力に含まれません。
  * [doc] sub_filter() のドキュメントにおける引数の誤りを修正しました。
  * [deb] サービス停止中のステータスとして正しくない終了コードを返す不具合を修正しました。 
  * 算術演算の結果が壊れる不具合を修正しました。この不具合は例えば _score 
    疑似カラムへと計算結果を代入するような場合に影響します。

感謝

  * Y.Kentaroさん
  * @orangainさん
  * 浅見さん

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




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