2. チュートリアル

2.1. インストール方法

  • MeCabのインストール

形態素単位でトークナイズした全文検索索引を使用したい場合は、 事前にMeCab (http://mecab.sourceforge.net/)をインストールしてください。

  • groongaのインストール

http://groonga.org/download/よりtar.gzファイルを取得し、 インストール先の環境にファイルを展開して、

./configure && make && sudo make install

のように実行することでインストールできます。

2.2. 使用方法

groongaは、Cのライブラリとして使用する方法と、groonga実行ファイルを通して使用する方法があります。

本チュートリアルでは、groonga実行ファイルを使用する方法について説明します。

2.2.1. groonga実行ファイル

groonga実行ファイルを使って、DBの作成・操作・サーバの起動・サーバへの接続などの 操作が行えます。

2.2.1.1. DBの作成

書式

groonga -n DBパス名

DBパス名には、新しく作成するDBのフルパス名を指定します。 新たなDBを作り、そのまま対話モードに入ります。

実行例:

% echo '' | groonga -n /var/tmp/hoge.db
%

2.2.1.2. DBの操作

書式

groonga DBパス名 [コマンド]

既存のデータベースのフルパス名をDBパス名に指定します。 コマンドを指定すると、実行結果を返します。 コマンドを指定しなかった場合は、対話モードに入ります。 対話モードでは、標準入力からコマンドを読み込み、順次実行します。

実行例:

% groonga /var/tmp/hoge.db
> table_list
[[0,1268293926.38794,0.00033],[[["id", "UInt32"],["name","ShortText"],["path","ShortText"],["flags","ShortText"],["domain", "ShortText"],["range","ShortText"]]]]
> ctrl-d
%

2.2.1.3. groongaサーバの起動

書式

groonga [-p ポート番号] -d DBパス名

既存のデーターベースのフルパス名をDBパス名に指定します。 指定したポート番号でTCPサービスを開始します。 (ポート番号を省略した場合は10041が使用されます)

オプションを指定しない場合は、当該ポートに対して、groongaの専用プロトコルで通信することができます。

実行例:

% groonga -d /var/tmp/hoge.db
%

2.2.1.4. groongaサーバへの接続

書式

groonga [-p ポート番号] -c [対象ホスト名]

対象ホストで動作しているgroongaサーバに接続します。 対象ホスト名を省略した場合はlocalhostに対して接続します。 接続に成功すると対話モードに入り、標準入力からコマンドを読み込んで順次実行します。

実行例:

% groonga -c
> table_list
[[0,1268294045.30181,0.00032],[[["id", "UInt32"],["name","ShortText"],["path","ShortText"],["flags","ShortText"],["domain", "ShortText"],["range","ShortText"]]]]
> ctrl-d
%

2.2.2. コマンド

groonga実行ファイルやgroongaサーバを介して様々なコマンドを実行して、DBを操作することができます。 コマンドは以下の二つの書式のいずれかで与えることができます。

書式1: コマンド名 引数1 引数2..

書式2: /d/コマンド名?引数名1=値1&引数名2=値2..

書式2で引数を渡す場合は、コマンド文字列をURLエンコードする必要があります。

2.2.2.1. 主なコマンド

status
groongaプロセスの状態を表示します。
table_list
DBに定義されているテーブルのリストを表示します。
column_list
テーブルに定義されているカラムのリストを表示します。
table_create
DBにテーブルを追加します。
column_create
テーブルにカラムを追加します。
select
テーブルに含まれるレコードを検索して表示します。
load
テーブルにレコードを挿入します。

2.2.2.2. テーブルの作成

table_createコマンドを使用してテーブルを作成します。

table_create

実行例:

> table_create Blog 0 ShortText
[[0,1268294088.70744,0.098794]]
>

ShortText型の主キー値を持つ、’Blog’という名前のテーブルを作成しました。

全文検索を行う場合は、語彙表テーブルを作成します。

実行例:

> table_create Terms TABLE_PAT_KEY|KEY_NORMALIZE ShortText Void TokenBigram
[[0,1268294159.76784,0.049841]]
>

ShortText型の主キー値を持つ、’Terms’という名前のテーブルを作成しました。

実行例のflagsのTABLE_PAT_KEY|KEY_NORMALIZEという値は、主キー値をパトリシア木を使用し、各語彙を正規化して登録することを示しています。

語彙表として使用するテーブルは、対象の文書をトークナイズする方式を、default_tokenizerパラメータで与えます。 この例ではバイグラムを指定しています。組み込みトークナイザとして以下が選べます。

TokenMecab
形態素解析(MeCab)で分かち書きした単位を語彙とします。
TokenDelimit
空白で区切った単位を語彙とします。
TokenUnigram
1文字ずつ区切った単位を語彙とします。
TokenBigram
文字バイグラムを語彙とします。
TokenTrigram
文字トライグラムを語彙とします。

2.2.2.3. カラムの作成

column_createコマンドを使用してカラムを作成します。

column_create

実行例:

> column_create Blog title 0 ShortText
[[0,1268294203.38404,0.056593]]
>

ShortText型の値を持つ、’title’という名前のカラムを’Blog’テーブルに追加しました。

このカラムに登録した文字列に対して全文検索を行う場合は、語彙表テーブルに対応するインデックス型のカラムを作成します。

実行例:

> column_create Terms blog_title COLUMN_INDEX|WITH_POSITION Blog title
[[0,1268294247.01333,0.129917]]
>

Blogテーブルのtitleカラムを検索対象とする、’blog_title’という名前のインデックス型カラムをTermsテーブルに作成しました。

インデックス型のカラムを作成した場合は、インデックス対象となるカラムをsourceに指定します。

実行例のflagsのCOLUMN_INDEX|WITH_POSITIONという値は、位置情報を格納するインデックス型のカラムであることを示しています。

2.2.2.4. データのロード

loadコマンドを使用します。

load

実行例:

> load --table Blog
[{"_key":"http://hoge.com/","title":"hoge"},{"_key":"http://fuga.com/","title":"fuga"}]
[[0,1268380982.80157,0.002685],2]
>

2.2.2.5. 検索

selectコマンドを使用します。

select

実行例:

> select Blog
[[0,1268381030.41737,2.7e-05],[[[2],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"]],[1,"http://hoge.com/","hoge"],[2,"http://fuga.com/","fuga"]]]]
>

tableパラメータだけを指定すると、他のパラメータはデフォルト値として解釈され、 先頭10件の全カラムが出力されます。

2.2.2.6. クエリ文字列の書式

groongaのクエリ文字列には2種類の書式があります。

selectコマンドのqueryパラメータには簡易な書式が指定できます。

実行例

> select Blog title hoge
[[0,1268381101.20846,0.000401],[[[1],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"]],[1,"http://hoge.com/","hoge"]]]]
>

match_columnsパラメータに’title’、queryパラメータに’hoge’という文字列を指定しています。 この場合、titleカラムに対して、’hoge’という文字列で全文検索を行った結果を返します。

selectコマンドのfilterパラメータとscorerパラメータには、 JavaScriptライクな文法で様々な条件を指定することができます。

実行例

> /d/select?table=Blog&filter=_id<=2&scorer=_score=rand()&output_columns=_id+_key+_score&sortby=_score
[[0,1268381229.56842,0.000219],[[[2],[["_id","UInt32"],["_key","ShortText"],["_score","Int32"]],[2,"http://fuga.com/",846930886],[1,"http://hoge.com/",1804289383]]]]
> /d/select?table=Blog&filter=_id<=2&scorer=_score=rand()&output_columns=_id+_key+_score&sortby=_score
[[0,1268381300.12763,0.000164],[[[2],[["_id","UInt32"],["_key","ShortText"],["_score","Int32"]],[1,"http://hoge.com/",1681692777],[2,"http://fuga.com/",1714636915]]]]
>

filterパラメータには

_id <= 2

という条件を指定しています。この場合は2件のレコードにヒットします。

scorerパラメータには、

_score = rand()

という条件を指定しています。各レコードのスコア値にランダムな値を設定しています。

sortbyパラメータには、

_score

を指定しています。スコア順に昇順にソートすることを意味しています。

このように指定すると、検索する度にランダムな順序で結果を表示することができます。