基本的な操作¶Groongaには、Cのライブラリとして使用する方法と、groonga実行ファイルを通して使用する方法があります。本チュートリアルでは、groonga実行ファイルを使用する方法について説明します。groonga実行ファイルを使って、データベースの作成・操作・サーバの起動・サーバへの接続などの操作が行えます。データベースの作成¶Groongaユーザへの第一歩はデータベースの作成です。以下の書式をご覧ください。オプションは、データベースの作成を指示します。DB_PATHは、新しく作成するデータベースのパスを指定します。データベースは複数のファイルによって構成されるため、正確には、データベースの入り口となるファイルのパスとして使用されます。データベースを構成する他のファイルについては、DB_PATHがパスのプレフィックスとして使用されます。(ファイルが存在します)。次の章で、既存のデータベースを開く方法を説明します)。上記のコマンドは、データベースを作成してから、コマンドの入力を受け付ける対話モードに入ります。Ctrlキーを押しながらdキーを押すと、対話モードから抜けることができます。/tmp/groonga-databases/introduction.dbデータベースの作成に成功すれば、/tmp/groonga-databases以下にデータベースを構成するファイルが配置されます。以下の書式は、既存のデータベースを操作する方法を示しています。[COMMAND]DB_PATHには操作対象のデータベースを指定します。指定したデータベースが存在しないときは失敗します。実行した後、実行結果を返します。指定されなかった場合には、対話モードに入ります。対話モードでは、標準入力からコマンドを読み込み、順次実行します。本チュートリアルでは、対話モードを主に使用します。コマンドを実行して、Groongaの実行状態を確認してみましょう。]以上のように、コマンドの実行結果は基本的にjson形式の配列として返却されます。配列の先頭には、エラーコードや実行時間などの情報が入ります。2番目の要素には、指示された操作の実行結果が入ります。他のツールを使うことで、JSONを整形できます。コマンドの書式¶データベースを操作するコマンドには、以下の書式で引数を与えます。..書式1では値を適切な順番で渡す必要があります。このような引数は、位置によって値の意味が決まるため、位置固定引数などと呼ばれることもあります。書式2では値を名前と一緒に渡します。そのため、任意の順序で引数を指定することができます。このような引数は、名前付き引数やキーワード引数と呼ばれることもあります。空白や特殊な記号(ダブルクォート、シングルクォート、および丸括弧)を含む値を指定したいときは、シングルクォート(')かダブルクォート(")で値を囲むようにしてください。コマンドの項を参考にしてください。主なコマンド¶statusGroongaプロセスの状態を表示します。table_listデータベースに定義されているテーブルのリストを表示します。column_listテーブルに定義されているカラムのリストを表示します。table_createデータベースにテーブルを追加します。column_createテーブルにカラムを追加します。selectテーブルに含まれるレコードを検索して表示します。loadテーブルにレコードを挿入します。コマンドを使用してテーブルを作成します。Groongaのテーブルには基本的に主キーが必要であり、テーブルを作成する際には型と格納方法も併せて指定する必要があります。型には数値や文字列などがあります。ここではデータの種類を表しているものという程度に考えてください。主キーの格納方法は、主キーを条件とする検索にかかる時間や、前方一致検索の可否などを左右します。こちらも後で説明します。それでは、テーブルを作成してみましょう。以下の例では、主キーのあるテーブルを作成します。引数はテーブルの名前を指定します。引数は主キーの格納方法を指定するために使っています。引数は主キーの型を指定します。true]実行結果の第2要素は、操作が成功したことを示しています。コマンドを用いて、テーブルの中身を表示することができます。引数のみを指定すると、指定したテーブルの中身を10件まで表示します。実行結果の[0]はテーブルに含まれるレコードの数を示しています。今回は何も登録されていないため0件です。レコード数の次に表示されている配列はテーブルの構成を示しています。["_id","Uint32"]はUInt32型の値を持つ_idという名前のカラム、["_key","ShortText"]はShortText型の値を持つ_keyという名前のカラムをそれぞれ表しています。上記の_idカラムと_keyカラムの2つのカラムは必須のカラムです。_idカラムはGroongaが自動的に割り当てるIDを格納します。_keyカラムは主キーを格納します。これらのカラム名を変更することはできません。コマンドを用いて、カラムを作成することができます。それでは、カラムを作成してみましょう。以下の例では、新しいカラムをSiteテーブルに追加します。引数はテーブルの名前を指定します。引数は新しいカラムの名前を指定します。引数はカラムに格納する値の型を指定します。コマンドは、JSON形式のレコードを受け取り、テーブルに格納します。以下の例では9つのレコードをSiteテーブルに格納します。9]実行結果の第2要素はロードされたレコードの数を示しています。上記の操作では、すべてのレコードを問題なくロードできています。念のため、データが入っていることを確認してみましょう。コマンドを用いて、テーブルの中身を表示することができます。コマンドは検索条件に適合するレコードを検索し、検索結果を出力します。それでは、IDを指定してレコードを取り出してみましょう。以下の例では、Siteテーブルの先頭レコードを取り出します。カラムに1が格納されているレコードを要求しています。]次に、主キーを指定してレコードを取り出してみましょう。格納されているレコードを要求しています。全文検索用の語彙表の作成¶そろそろ全文検索の使い方について見ていきましょう。Groongaでは転置インデックスを使って高速な全文検索を実現しています。そのため、まずは転置インデックスとして用いるテーブルを作成する必要があります。テーブルの内容は、文書に含まれる単語やN-gramなどの索引語を主キーとして、各カラムに索引語の位置情報を格納するという構成になります。結果として、主キーのカラムは全文検索における語彙表の役割を果たします。以下の例では、Termsという名前のテーブルを転置インデックスの語彙表として作成しています。索引語を格納するため、主キーの型はShortTextです。多くの引数が指定されているものの、本チュートリアルではすべてを理解する必要はありません。以下に簡単な説明を述べますが、読み飛ばしてもらってかまいません。TABLE_PAT_KEYフラグは、主キーをパトリシア木に格納することを指示しています。引数には、検索対象の文書をトークナイズする方式を指定するようになっています。上記の例では、一般的にN-gramと呼ばれるインデックス方式に対応するTokenBigramを指定しています。引数はインデックスの単語をノーマライズするかどうかを指定しています。次に必要なのは、インデックス型のカラムを作成することです。このカラムは、関連付けられたカラムに対する全文検索に利用されます。全文検索を行いたいカラムに対してインデックスを作成することに相当します。それでは、インデックスカラムを作成してみましょう。以下の例では、Siteテーブルのカラムに対するインデックスカラムを作成します。それでは、Siteテーブルのtitleカラムを全文検索の対象とするべく、インデックス型のカラムを作成してみましょう。引数はインデックスカラムを指定します。引数はインデックスの対象となるカラムを指定します。COLUMN_INDEXフラグはインデックスカラムの作成を指示し、WITH_POSITIONフラグは各索引語の位置情報をインデックスに含めることを指示します。一般的な全文検索インデックスを作成したいときは、COLUMN_INDEX|WITH_POSITIONを指定してください。索引語の位置情報については、本チュートリアルでは触れません。語彙表とインデックスカラムを作成するタイミングは、データをロードする前後のどちらでも問題ありません。データをロードした後でインデックスを作成し、さらに新しいデータをロードすることもできます。インデックスの作成を指示したタイミングでレコードが既に存在するときは、静的にインデックスを作成します。インデックスを作成した後で追加されたレコードについては、動的にインデックスを更新します。コマンドによる全文検索が可能になります。引数により指定することができます。いう文字列が含まれているレコードを検索します。全文検索を指示しています。指定したときは、全角・半角や大文字・小文字などの違いが吸収されることに注意してください。いう単語を含む先頭レコードのみが検索条件に適合します。いう引数が存在します。このパラメータはデフォルトで検索対象にするカラムを指定するもので、カラム名を指定しない検索条件にのみ適用されます。指定したときと同じ検索条件になります。引数を用いることで、検索結果に含めるカラムを指定することができます。複数のカラムを指定するときは、カンマ(,)区切りでカラムを列挙します。]上記の例では、_scoreカラムを含む3つのカラムを指定しています。_scoreカラムはGroongaの検索結果に含まれるカラムであり、全文検索の条件に合致するレコードほど高い数値が入ります。引数を用いることで、検索結果の一部のみを表示することができます。大量の検索結果を分割してページ単位で表示したい場合などに有用です。引数には、検索結果における始点を指定します。引数を省略するか、0を指定するようにしてください。引数には、検索結果の表示件数を指定します。引数を渡すことにより、検索結果を並べ替えることができます。引数には、整列の基準として用いるカラムを指定します。検索結果は指定したカラムの値が昇順になるように並べ替えられます。引数の中でカラム名の前にハイフン(-)を付けることにより、降順に並べ替えることもできます。以下の例では、Siteテーブルのレコードを逆順に表示しています。]次の例では、_scoreカラムを整列の基準とすることにより、検索結果のランキングをおこなっています。検索結果はクエリとの関連性が高い順に並べ替えられます。]整列の基準となるカラムを複数指定したいときは、カンマ(,)区切りでカラムを列挙します。複数のカラムを指定したときは、最初のカラムを基準として整列した後、最初のカラムに同じ値が格納されているレコードを次のカラムを基準として整列します。引数を利用することができます。通常のカラムでの絞り込みには利用できません。