13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Groongaの既存のデータベースの中を見る3つの方法

Posted at

はじめに

Groongaによる全文検索システムの機能を本当にざっくり分けると以下の2つになると思います。

  • データベースを作成・更新する
  • データベースから検索して表示する

普通は両方とも同じプロジェクトで行いますが、ちょっとそこにあったどのプロジェクトで使われているかわからないがどうやらGroongaっぽいデータベースの中身を見たいという場面もあるかもしれません。

そんなときのために、既存のデータベースを見る方法をまとめてみました。私が普段使っている方法は大きく分けて3つあります。

  • Groonga本体のコマンドを使う
  • 各言語バインディングでスクリプトを書く
  • データベース管理ツールを使う

順番に例を見ていきますが、以下で挙げる方法はどれもデータベースファイルに対して書き込み権限が必要です。言い換えると、参照だけでなく更新もできてしまうということです。くれぐれもご注意ください。

Groonga本体のコマンドを使う

Groonga本体がインストールされていていれば、以下のように既存のデータベースを開いて対話モードに入ることができます。もしGroongaコマンドで作られたデータベースでなく、例えばRroongaなどで作られたデータベースでも問題ありません。

% groonga /path/to/db

対話モードに入ったら、以下のようにしてレコードを検索することができます。

> table_list
> column_list テーブル名
> select テーブル名 --match_columns カラム名 --query 検索ワード

詳細は以下の文書をご覧ください。

各言語バインディングでスクリプトを書く

Groonga本体のコマンドを使わなくても、Groongaにはたくさんの言語バインディングがあります。それらを使ってデータベースの中を見るスクリプトを書くという方法です。

データベースを作成するのは難しそうですが、参照するだけなら簡単そうな気がしませんか?言語バインディングを使い始めるときは、まず既存のデータベースを検索するためのスクリプトを書くところから始めるのがおすすめです。

例えば、Rroongaを使えば以下のようにして検索スクリプトを書くことができます。

require "groonga"

Groonga::Database.open("/path/to/db") do |database|
  p database.tables
  users = Groonga["Users"]  # Usersテーブルがあった場合
  p users.columns
  selected_users = users.select do |record|
    record.name =~ "検索ワード"  # nameカラムがあった場合
  end
  p selected_users.collect {|record| record._key}
end

データベース管理ツールを使う

Groongaのデータベースを管理するための専用ツールを使う方法です。例えば、Rroongaにはgroonga-database-inspectというデータベースのサイズなどの情報を見られるコマンドが付属しています。去年のGroonga Advent Calendar 2013でも取り上げられていました。

また、これもRroongaに付属しているコマンドですが、grndumpというデータベースをダンプするためのツールがあります。詳細は以下の記事をご覧ください。

あと、私が開発中のgroonga-database-viewer-gtkというツールもあります。Rubyをお使いであれば、RubyGems.orgから以下のようにインストールできます。

% gem install groonga-database-viewer-gtk

これは、Ruby/GTK2というGUIライブラリーを使って、Groongaのデータベースを閲覧することができるアプリケーションです。以下のように、コマンドの引数にデータベースのパスを指定するだけで起動できます。

% groonga-database-viewer-gtk /path/to/db

こんな感じで表示されて、カラムを指定しての検索ができます。

Screenshot from 2014-12-04 23:04:39.png

インデックスカラムについては、現在は対象レコード数とIDリストを表示していますが、どうするのがいいかは検討中です。

Screenshot from 2014-12-04 23:04:59.png

ソースコードはGitHubで公開しています。

myokoym/groonga-database-viewer-gtk ・ GitHub

おわりに

Groongaのデータベースの中を見る方法を3つ紹介しました。独自のバイナリ形式のファイルですが、意外といろいろな方法があることがわかってもらえたかと思います。みなさんも、お好きな言語で練習がてらGroongaデータベース管理ツールを作ってみてはどうでしょうか?

13
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?