BloGroonga

2013-09-29

今日は肉の日ですね。

groonga 3.0.8リリース

groonga 3.0.8 をリリースしました!

それぞれの環境毎のインストール方法: インストール

これまでも、groonga.orgにて 利用事例 を紹介してきましたが、それとは別に gihyo.jp にてgroonga関連の記事の連載を 隔週連載groonga として半年ほど続けていましたが、ついに最終回を迎えました。

まだgroongaを知らない人にもWebの連載記事を通じて知ってもらいたいというのが動機ではじめたこの連載がきっかけでgroongaに興味を持ってもらえたのではないでしょうか。

第一回から第十回までの過去記事については 隔週連載groonga のページを参照してください。

管理画面のユーザビリティを改善しました

groongaに付属している管理画面はとてもシンプルなものなのですが、今回 @orangain さんがいくつか使い勝手を改善するためのパッチを提供してくれました。ありがとうございます。

  • エラー時読込中ダイアログが表示されたままにならないようにする
  • 検索フォームにプレースホルダを表示する
  • Enterキーで検索フォームを送信する

groonga-httpdでクエリログのカスタマイズをサポート

groonga-httpdでもクエリログをカスタマイズできるようになりました。これまでは、クエリについてはaccess.logであったり、error.logなどを参考にするしかありませんでした。リクエストをGETですべて処理しているのであれば、それでも良いのですが、POSTで処理している場合、エラーが発生したときのクエリを特定するのが難しいという問題がありました。

今回groonga-httpdでクエリログをカスタマイズできるようになったことで問題となるクエリを特定しやすくなりました。カスタマイズするには、groonga-httpd.confにgroonga_query_log_pathディレクティブを指定します。

このディレクティブを指定しなかった場合には標準で次の場所にログが保存されていました。今回のリリースではデフォルトのログのパスもちょっと変わります。

  • 変更前 /var/log/groonga/httpd/groonga.log
  • 変更後 /var/log/groonga/httpd/groonga-query.log

groonga_query_log_pathディレクティブはhttp,server,locationブロックいずれかに指定します。

locationブロックごとに指定できるようになったことで、ベータベースごとにクエリログを保存することができるようにもなりました。

location /d/ {
  groonga on;
  # You can disable query log for groonga.
  groonga_query_log_path /var/log/groonga/httpd/groonga-location-d.log;
}

location /d2/ {
  groonga on;
  # You can disable query log for groonga.
  groonga_query_log_path /var/log/groonga/httpd/groonga-location-d2.log;
}

ディレクティブの詳細については、 groonga-query-log-path のドキュメントを参照してください。

deleteコマンドで参照関係のあるレコード削除をサポート

今回のリリースでは、deleteコマンドで参照関係のあるレコードの削除をサポートしました。

例えば、とあるユーザーに関連付けられたURLがいくつかあるとします。ユーザー情報とURLのテーブルにそれぞれデータを格納して参照するようにするとなると、次のようなスキーマとなるでしょう。

table_create Users TABLE_HASH_KEY ShortText
table_create URLs TABLE_HASH_KEY ShortText

column_create Users bookmarks COLUMN_VECTOR URLs
column_create URLs author COLUMN_SCALAR Users

column_create URLs bookmarks_index COLUMN_INDEX Users bookmarks

これに、サンプルデータをロードします。

load --table Users
[
{"_key": "mori", "bookmarks": ["http://mroonga.org/", "http://groonga.org/", "http://ranguba.org/"]}
]

load --table URLs
[
{"_key": "http://groonga.org/", "author": "mori"}
{"_key": "http://mroonga.org/", "author": "hayashi"}
]

このとき、UsersテーブルにURLsテーブルにあるキーを参照するデータが格納されています。そのため、単純に次のようにしてURLsテーブルの"http://groonga.org"というキーのレコードを削除することはできませんでした。

> delete URLs --key "http://groonga.org/"

実際に実行してみると次のようなエラーが発生していました。

[
  [
    -2,1380092940.21387,
    0.000238895416259766,
    "undeletable record (URLs:2) has value (bookmarks_index:1)",
    [
      ["is_deletable","db.c",1564]
    ]
  ],
  false
]

そのため、 delete URLs --key "http://groonga.org/" でレコードを削除する前に、Usersで参照しているデータを削除してからURLsのレコードを削除するというステップを踏む必要がありました。

これが、今回の参照関係のあるレコードの削除のサポートで、 delete URLs --key "http://groonga.org/" を実行するとURLsの該当するレコードを削除できるようになりました。

これを実行しても、bookmarksカラムの関係ないデータは削除されません。"http://mroonga.org/"と"http://ranguba.org/"はそのままです。

さいごに

3.0.7からの詳細な変更点は 3.0.8リリース 2013/09/29 を確認してください。

それでは、groongaでガンガン検索してください!