Provided by: groonga-bin_6.0.1-1ubuntu1_amd64 bug

NAME

       groonga - Groonga documentation

       · news

GROONGAの特徴

   Groonga の概要
       Groonga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索
       結果に反映できます。また、参照をブロックせずに更新できることから、即時更新の必要なアプリ
       ケーションにおいても高い性能を発揮します。

       全文検索エンジンとして開発された   Groonga  ですが、独自のカラムストアを持つ列指向のデータ
       ベースとしての側面も持っています。そのため、MySQL や PostgreSQL など、既存の代表的なデータ
       ベースが苦手とする集計クエリを高速に処理できるという特徴があり、組み合わせによって弱点を補
       うような使い方もできます。

       Groonga の基本機能は C ライブラリとして提供されていますが、MySQL や PostgreSQL  と連携させ
       たり、Ruby  から呼び出したりすることもできます。そのため、任意のアプリケーションに組み込む
       ことが可能であり、多様な使い方が考えられます。 興味のある方は 利用例 をご覧ください。

   全文検索と即時更新
       一般的なデータベースにおいては、追加・削除などの操作がすぐに反映されます。一方、全文検索に
       おいては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しない
       エンジンが少なくありません。

       これに対し、転置索引を用いた全文検索エンジンでありながら、Groonga は文書を短時間で追加・削
       除することができます。その上、更新しながらでも検索できるという優れた特徴を持っているた
       め、全文検索エンジンとしてはとても柔軟性があります。また、複数の転置索引を統合するような重
       い処理を必要としないので、安定して高い性能を発揮することが期待できます。

   カラムストアと集計クエリ
       現代は、インターネットを情報源とすれば、いくらでも情報を収集できる時代です。しかし、膨大な
       情報から有益な情報を引き出すのは困難であり、多面的な分析による試行錯誤が必要となります。た
       とえば、日付や時間帯により絞り込んでみたり、地域により絞り込んでみたり、性別や年齢により絞
       り込んでみたりすることでしょう。そして、そのようなときに便利な存在が集計クエリです。

       集計クエリとは、指定したカラムの値によってレコードをグループ化し、各グループに含まれるレ
       コードの数を求めるクエリです。たとえば、地域の ID を格納しているカラムを指定すれば、地域毎
       のレコード数が求まります。日付のカラムを指定したときの出力をグラフ化すれば、レコード数の時
       間変化を視覚化することができます。さらに、地域による絞り込みと日付に対する集計クエリを組み
       合わせれば、特定の地域におけるレコード数の時間変化を視覚化ことも可能です。このように、尺度
       を自由に選択して絞り込み・集計できることは、膨大な情報を扱う上でとても重要になります。

       Groonga が集計クエリを高速に処理できる理由は、データベースの論理構造にカラムストアを採用し
       ているからです。集計クエリが参照するのは指定されたカラムのみであるため、カラム単位でデータ
       を格納する列指向のデータベースでは、必要なカラムのみを無駄なく読み出せることが利点となりま
       す。一方、レコード単位でデータを格納する行指向のデータベースでは、隣接するカラムをまとめて
       読み出してしまうことが欠点となります。

   転置索引とトークナイザ
       転置索引は大規模な全文検索に用いられる伝統的なデータ構造です。転置索引を用いた全文検索エン
       ジンでは、文書を追加するときに索引語を記録しておき、検索するときはクエリを索引語に分割して
       出現文書を求めます。そのため、文書やクエリから索引語を抜き出す方法が重要になります。

       トークナイザは、文字列から索引語を抜き出すモジュールです。日本語を対象とする全文検索におい
       ては、形態素を索引語として抜き出す方式と文字 N-gram を抜き出す方式のいずれか、あるいは両方
       を用いるのが一般的です。形態素方式は検索時間や索引サイズの面で優れているほか、検索結果に不
       要な文書が含まれにくいという利点を持っています。一方、N-gram  方式には検索漏れが発生しにく
       いという利点があり、状況によって適した方式を選択することが望ましいとされています。

       Groonga は形態素方式と N-gram 方式の両方に対応しています。初期状態で利用できるトークナイザ
       は空白を区切り文字として用いる方式と N-gram 方式のみですが、形態素解析器 MeCab  を組み込ん
       だときは  MeCab による分かち書きの結果を用いる形態素方式が有効になります。トークナイザはプ
       ラグインとして追加できるため、特徴的なキーワードのみを索引語として採用するなど、独自のトー
       クナイザを開発することが可能です。

   共有可能なストレージと参照ロックフリー
       CPU のマルチコア化が進んでいるため、同時に複数のクエリを実行したり、一つのクエリを複数のス
       レッドで実行したりすることの重要性はますます高まっています。

       Groonga のストレージは、複数のスレッド・プロセスで共有することができます。また、参照ロック
       フリーなデータ構造を採用しているため、更新クエリを実行している状況でも参照クエリを実行する
       ことができます。参照クエリを実行できる状態を維持しながら更新クエリを実行できるので、リアル
       タイムなシステムに適しています。さらには、MySQL     を介して更新クエリを実行している最中に
       Groonga の HTTP サーバを介して参照クエリを実行するなど、多彩な運用が可能となっています。

   位置情報(緯度・経度)検索
       GPS   に代表される測位システムを搭載した高機能な携帯端末の普及などによって、位置情報を扱う
       サービスはますます便利になっています。たとえば、近くにあるレストランを探しているときは、現
       在地からの距離を基準として検索をおこない、検索結果を地図上に表示してくれるようなサービスが
       便利です。そのため、位置情報検索を高速に実現できることが重要になっています。

       Groonga では転置索引を応用して高速な位置情報検索を実現しています。矩形・円による範囲検索に
       対応しているほか、基準点の近くを優先的に探索させることができます。また、距離計算をサポート
       しているので、位置情報検索の結果を基準点からの距離によって整列することも可能です。

   Groonga ライブラリ
       Groonga  の基本機能は C ライブラリとして提供されているので、任意のアプリケーションに組み込
       んで利用することができます。C/C++ 以外については、Ruby から Groonga を利用するライブラリな
       どが関連プロジェクトにおいて提供されています。詳しくは  関連プロジェクト  を参照してくださ
       い。

   Groonga サーバ
       Groonga にはサーバ機能があるため、レンタルサーバなどの新しいライブラリをインストールできな
       い環境においても利用できます。対応しているのは   HTTP、memcached  binary  プロトコル、およ
       びGroongaの独自プロトコルであるGroonga Query Transfer Protocol( /spec/gqtp )です。サーバ
       として利用するときはクエリのキャッシュ機能が有効になるため、同じクエリを受け取ったときは応
       答時間が短くなるという特徴があります。

   Mroonga ストレージエンジン
       Groonga は独自のカラムストアを持つ列指向のデータベースとしての側面を持っていますが、既存の
       RDBMS  のストレージエンジンとして利用することもできます。たとえば、Groonga  をベースとする
       MySQL のストレージエンジンとして Mroonga が開発されています。Mroonga は MySQL のプラグイン
       として動的にロードすることが可能であり、Groonga   のカラムストアをストレージとして利用した
       り、全文検索エンジンとして Groonga  を  MyISAM  や  InnoDB  と連携させたりすることができま
       す。Groonga 単体での利用、および MyISAM, InnoDB との連携には一長一短があるので、用途に応じ
       て適切な組み合わせを選ぶことが大切です。詳しくは 関連プロジェクト を参照してください。

インストール

       このセクションではGroongaのインストール方法を環境毎に説明します。主要なプラットフォームに
       はパッケージがあります。自分でGroongaをビルドするよりもパッケージを使うことを推奨しま
       す。しかし、心配しないでください。ソースからGroongaをビルドするためのドキュメントもありま
       す。

       32-bit用と64-bit用のパッケージを配布していますが、サーバ用途には64-bitパッケージを利用する
       ことをオススメします。32-bit用パッケージはテスト用か開発用にだけ使って下さい。32-bit用パッ
       ケージを使った場合は、中程度のサイズのデータでもメモリ不足エラーになることがあります。

   Windows
       このセクションではWindows上でGroongaをインストールする方法を説明します。Groongaをインス
       トールするにはzipパッケージを展開する方法とインストーラーを実行する方法があります。

       32-bit用と64-bit用のパッケージを配布していますが、サーバ用途には64-bitパッケージを利用する
       ことをオススメします。32-bit用パッケージはテスト用か開発用にだけ使って下さい。32-bit用パッ
       ケージを使った場合は、中程度のサイズのデータでもメモリ不足エラーになることがあります。

   インストーラー
       32-bit環境の場合は、x86のバイナリをpackages.groonga.orgからダウンロードしてください。

          · http://packages.groonga.org/windows/groonga/groonga-6.0.1-x86.exe

       その後、バイナリを実行します。

       64-bit環境の場合は、x64のバイナリをpackages.groonga.orgからダウンロードしてください。

          · http://packages.groonga.org/windows/groonga/groonga-6.0.1-x64.exe

       その後、バイナリを実行します。

       スタートメニュー内にあるコマンドプロンプトを使って /reference/executables/groonga を起動し
       てください。

   zip
       32-bit環境の場合は、x86のzipアーカイブをpackages.groonga.orgからダウンロードしてください。

          · http://packages.groonga.org/windows/groonga/groonga-6.0.1-x86.zip

       その後、アーカイブを展開します。

       64-bit環境の場合は、x64のzipアーカイブをpackages.groonga.orgからダウンロードしてください。

          · http://packages.groonga.org/windows/groonga/groonga-6.0.1-x64.zip

       その後、アーカイブを展開します。

       bin フォルダーに /reference/executables/groonga があるのでそれを起動してください。

   ソースからビルド
       まずWindows上でGroongaをビルドするために必須のツールをインストールします。以下が必須のツー
       ルです。

          · Microsoft Visual Studio Express 2013 for Windows Desktop

          · CMake

       zipアーカイブをpackages.groonga.orgからダウンロードしてください。

          · http://packages.groonga.org/source/groonga/groonga-6.0.1.zip

       その後、アーカイブを展開します。

       Groongaのソースフォルダへと移動します:

          > cd c:\Users\%USERNAME%\Downloads\groonga-6.0.1

       cmake  でビルドオプションを設定します。以下のコマンドラインは64-bit用のGroongaをビルドする
       ためのものです。32-bit用のGroongaをビルドする場合は代わりに  -G "Visual Studio 12 2013" パ
       ラメーターを指定してください:

          groonga-6.0.1> cmake . -G "Visual Studio 12 2013 Win64" -DCMAKE_INSTALL_PREFIX=C:\Groonga

       ビルド:

          groonga-6.0.1> cmake --build . --config Release

       インストール:

          groonga-6.0.1> cmake --build . --config Release --target Install

       以上の手順で /reference/executables/groongac:\Groonga\bin\groonga.exe にインストールさ
       れます。

   Mac OS X
       このセクションではMac   OS  X上でGroongaをインストールする方法を説明します。  MacPortsHomebrew を使ってインストールできます。

   MacPorts
       インストール:

          % sudo port install groonga

   Homebrew
       インストール:

          % brew install groonga

       MeCab をトークナイザーとして使いたいときは、 --with-mecab オプションを指定してください。

          % brew install groonga --with-mecab

       それからMeCabの辞書をインストール・設定します。

       インストール:

          % brew install mecab-ipadic

       設定:

          % sed -i '' -e 's,dicrc.*=.*,dicrc = /usr/local/lib/mecab/dic/ipadic,g' /usr/local/etc/mecabrc

   ソースからビルド
       Xcode をインストールしてください。

       ソースをダウンロードします:

          % curl -O http://packages.groonga.org/source/groonga/groonga-6.0.1.tar.gz
          % tar xvzf groonga-6.0.1.tar.gz
          % cd groonga-6.0.1

       configureを実行します( configure のオプションについては source-configure を参照してくださ
       い):

          % ./configure

       ビルド:

          % make -j$(/usr/sbin/sysctl -n hw.ncpu)

       インストール:

          % sudo make install

   Debian GNU/Linux
       このセクションではDebian GNU/Linux上でGroonga関連のdebパッケージをインストールする方法を説
       明します。これらのパッケージは apt でインストールできます。

       32-bit用と64-bit用のパッケージを配布していますが、サーバ用途には64-bitパッケージを利用する
       ことをオススメします。32-bit用パッケージはテスト用か開発用にだけ使って下さい。32-bit用パッ
       ケージを使った場合は、中程度のサイズのデータでもメモリ不足エラーになることがあります。

   wheezy
       Groongaのaptリポジトリを追加します。

       /etc/apt/sources.list.d/groonga.list:

          deb http://packages.groonga.org/debian/ wheezy main
          deb-src http://packages.groonga.org/debian/ wheezy main

       インストール:

          % sudo apt-get update
          % sudo apt-get install -y --allow-unauthenticated groonga-keyring
          % sudo apt-get update
          % sudo apt-get install -y -V groonga

       注釈:
          groonga パッケージは全文検索のための最小構成パッケージです。Groongaをサーバー用途で使う
          なら、設定済みの追加パッケージをインストールすることができます。

          サーバー用途のための2つのパッケージがあります。

          · groonga-httpd (nginxを元にしたHTTPサーバー)

          · groonga-server-gqtp (GQTPサーバー)

          詳細は /server を参照してください。

       MeCab  をトークナイザーとして使いたいときは、groonga-tokenizer-mecabパッケージをインストー
       ルしてください。

       groonga-tokenizer-mecabパッケージのインストール:

          % sudo apt-get install -y -V groonga-tokenizer-mecab

       TokenFilterStem  をトークンフィルターとして使いたいときはgroonga-tokenizer-filter-stemパッ
       ケージをインストールしてください。

       groonga-token-filter-stemパッケージのインストール:

          % sudo apt-get install -y -V groonga-token-filter-stem

       Munin   プラグインを提供するパッケージもあります。MuninでGroongaの状態をモニターしたい場合
       は、groonga-munin-pluginsパッケージをインストールしてください。

       groonga-munin-pluginsパッケージのインストール:

          % sudo apt-get install -y -V groonga-munin-plugins

       MySQL互換のノーマライザーをGroongaのプラグインとして提供するパッケージがあります。MySQL互
       換のノーマライザーを使うには  groonga-normalizer-mysql  パッケージをインストールしてくださ
       い。

       groonga-normalizer-mysqlパッケージのインストール:

          % sudo apt-get install -y -V groonga-normalizer-mysql

   jessie
       バージョン 5.0.3 で追加.

       Groongaのaptリポジトリを追加します。

       /etc/apt/sources.list.d/groonga.list:

          deb http://packages.groonga.org/debian/ jessie main
          deb-src http://packages.groonga.org/debian/ jessie main

       インストール:

          % sudo apt-get update
          % sudo apt-get install -y --allow-unauthenticated groonga-keyring
          % sudo apt-get update
          % sudo apt-get install -y -V groonga

       注釈:
          groonga パッケージは全文検索のための最小構成パッケージです。Groongaをサーバー用途で使う
          なら、設定済みの追加パッケージをインストールすることができます。

          サーバー用途のための2つのパッケージがあります。

          · groonga-httpd (nginxを元にしたHTTPサーバー)

          · groonga-server-gqtp (GQTPサーバー)

          詳細は /server を参照してください。

       MeCab  をトークナイザーとして使いたいときは、groonga-tokenizer-mecabパッケージをインストー
       ルしてください。

       groonga-tokenizer-mecabパッケージのインストール:

          % sudo apt-get install -y -V groonga-tokenizer-mecab

       TokenFilterStem  をトークンフィルターとして使いたいときはgroonga-tokenizer-filter-stemパッ
       ケージをインストールしてください。

       groonga-token-filter-stemパッケージのインストール:

          % sudo apt-get install -y -V groonga-token-filter-stem

       Munin   プラグインを提供するパッケージもあります。MuninでGroongaの状態をモニターしたい場合
       は、groonga-munin-pluginsパッケージをインストールしてください。

       groonga-munin-pluginsパッケージのインストール:

          % sudo apt-get install -y -V groonga-munin-plugins

       MySQL互換のノーマライザーをGroongaのプラグインとして提供するパッケージがあります。MySQL互
       換のノーマライザーを使うには  groonga-normalizer-mysql  パッケージをインストールしてくださ
       い。

       groonga-normalizer-mysqlパッケージのインストール:

          % sudo apt-get install -y -V groonga-normalizer-mysql

   ソースからビルド
       Groongaをビルドするために必要なパッケージをインストールします:

          % sudo apt-get install -y -V  wget tar build-essential zlib1g-dev liblzo2-dev libmsgpack-dev libzmq-dev libevent-dev libmecab-dev

       ソースをダウンロードします:

          % wget http://packages.groonga.org/source/groonga/groonga-6.0.1.tar.gz
          % tar xvzf groonga-6.0.1.tar.gz
          % cd groonga-6.0.1

       configureを実行します( configure のオプションについては source-configure を参照してくださ
       い):

          % ./configure

       ビルド:

          % make -j$(grep '^processor' /proc/cpuinfo | wc -l)

       インストール:

          % sudo make install

   Ubuntu
       このセクションではUbuntu上でGroonga関連のdebパッケージをインストールする方法を説明しま
       す。これらのパッケージは apt でインストールできます。

       32-bit用と64-bit用のパッケージを配布していますが、サーバ用途には64-bitパッケージを利用する
       ことをオススメします。32-bit用パッケージはテスト用か開発用にだけ使って下さい。32-bit用パッ
       ケージを使った場合は、中程度のサイズのデータでもメモリ不足エラーになることがあります。

   PPA(Personal Package Archive)
       Ubuntu用のGroongaのAPTリポジトリーはLaunchpad上のPPA(Personal Package Archive)を使ってい
       ます。このPPAからAPTでGroongaをインストールできます。

       サポートしているUbuntuのバージョンは次の通りです。

          · 12.04 LTS Precise Pangolin

          · 14.04 LTS Trusty Tahr

          · 15.04 Vivid Vervet

          · 15.10 Wily Werewolf

       Groongaをインストールするためにuniverseリポジトリを有効にしてください:

          % sudo apt-get -y install software-properties-common
          % sudo add-apt-repository -y universe

       ppa:groonga/ppa PPAをシステムに登録します:

          % sudo add-apt-repository -y ppa:groonga/ppa
          % sudo apt-get update

       インストール:

          % sudo apt-get -y install groonga

       注釈:
          groonga パッケージは全文検索のための最小構成パッケージです。Groongaをサーバー用途で使う
          なら、設定済みの追加パッケージをインストールすることができます。

          サーバー用途のための2つのパッケージがあります。

          · groonga-httpd (nginxを元にしたHTTPサーバー)

          · groonga-server-gqtp (GQTPサーバー)

          詳細は /server を参照してください。

       MeCab  をトークナイザーとして使いたいときは、groonga-tokenizer-mecabパッケージをインストー
       ルしてください。

       groonga-tokenizer-mecabパッケージのインストール:

          % sudo apt-get -y install groonga-tokenizer-mecab

       TokenFilterStem  をトークンフィルターとして使いたいときはgroonga-tokenizer-filter-stemパッ
       ケージをインストールしてください。

       groonga-token-filter-stemパッケージのインストール:

          % sudo apt-get -y install groonga-token-filter-stem

       Munin   プラグインを提供するパッケージもあります。MuninでGroongaの状態をモニターしたい場合
       は、groonga-munin-pluginsパッケージをインストールしてください。

       groonga-munin-pluginsパッケージのインストール:

          % sudo apt-get -y install groonga-munin-plugins

       MySQL互換のノーマライザーをGroongaのプラグインとして提供するパッケージがあります。MySQL互
       換のノーマライザーを使うには  groonga-normalizer-mysql  パッケージをインストールしてくださ
       い。

       groonga-normalizer-mysqlパッケージのインストール:

          % sudo apt-get -y install groonga-normalizer-mysql

   ソースからビルド
       Groongaをビルドするために必要なパッケージをインストールします:

          % sudo apt-get -V -y install wget tar build-essential zlib1g-dev liblzo2-dev libmsgpack-dev libzmq-dev libevent-dev libmecab-dev

       ソースをダウンロードします:

          % wget http://packages.groonga.org/source/groonga/groonga-6.0.1.tar.gz
          % tar xvzf groonga-6.0.1.tar.gz
          % cd groonga-6.0.1

       configureを実行します( configure のオプションについては source-configure を参照してくださ
       い):

          % ./configure

       ビルド:

          % make -j$(grep '^processor' /proc/cpuinfo | wc -l)

       インストール:

          % sudo make install

   CentOS
       このセクションではCentOS上でGroonga関連のRPMパッケージをインストールする方法を説明しま
       す。これらのパッケージは yum でインストールできます。

       32-bit用と64-bit用のパッケージを配布していますが、サーバ用途には64-bitパッケージを利用する
       ことをオススメします。32-bit用パッケージはテスト用か開発用にだけ使って下さい。32-bit用パッ
       ケージを使った場合は、中程度のサイズのデータでもメモリ不足エラーになることがあります。

   CentOS 5
       インストール:

          % sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
          % sudo yum makecache
          % sudo yum install -y groonga

       注釈:
          groonga パッケージは全文検索のための最小構成パッケージです。Groongaをサーバー用途で使う
          なら、設定済みの追加パッケージをインストールすることができます。

          サーバー用途のための2つのパッケージがあります。

          · groonga-httpd (nginxを元にしたHTTPサーバー)

          · groonga-server-gqtp (GQTPサーバー)

          詳細は /server を参照してください。

       MeCab  をトークナイザーとして使いたいときは、groonga-tokenizer-mecabパッケージをインストー
       ルしてください。

       groonga-tokenizer-mecabパッケージのインストール:

          % sudo yum install -y groonga-tokenizer-mecab

       Munin   プラグインを提供するパッケージもあります。MuninでGroongaの状態をモニターしたい場合
       は、groonga-munin-pluginsパッケージをインストールしてください。

       注釈:
          groonga-munin-pluginsパッケージはmunin-nodeパッケージを必要としますが、munin-nodeパッ
          ケージはCentOSの公式リポジトリには含まれていません。munin-nodeパッケージを yum でインス
          トールするために Repoforge (RPMforge) リポジトリか EPEL  リポジトリを有効にする必要があ
          ります。

          i386環境でRepoforge (RPMforge)リポジトリを有効にする:

              % wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el5.rf.i386.rpm
              % sudo rpm -ivh rpmforge-release-0.5.2-2.el5.rf.i386.rpm

          x86_64環境でRepoforge (RPMforge)リポジトリを有効にする:

              % wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el5.rf.x86_64.rpm
              % sudo rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

          EPELリポジトリを有効にする(環境非依存):

              % wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
              % sudo rpm -ivh epel-release-5-4.noarch.rpm

       groonga-munin-pluginsパッケージのインストール:

          % sudo yum install -y groonga-munin-plugins

       MySQL互換のノーマライザーをGroongaのプラグインとして提供するパッケージがあります。MySQL互
       換のノーマライザーを使うには  groonga-normalizer-mysql  パッケージをインストールしてくださ
       い。

       groonga-normalizer-mysqlパッケージのインストール:

          % sudo yum install -y groonga-normalizer-mysql

   CentOS 6
       インストール:

          % sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
          % sudo yum makecache
          % sudo yum install -y groonga

       注釈:
          groonga パッケージは全文検索のための最小構成パッケージです。Groongaをサーバー用途で使う
          なら、設定済みの追加パッケージをインストールすることができます。

          サーバー用途のための2つのパッケージがあります。

          · groonga-httpd (nginxを元にしたHTTPサーバー)

          · groonga-server-gqtp (GQTPサーバー)

          詳細は /server を参照してください。

       MeCab  をトークナイザーとして使いたいときは、groonga-tokenizer-mecabパッケージをインストー
       ルしてください。

       groonga-tokenizer-mecabパッケージのインストール:

          % sudo yum install -y groonga-tokenizer-mecab

       Munin   プラグインを提供するパッケージもあります。MuninでGroongaの状態をモニターしたい場合
       は、groonga-munin-pluginsパッケージをインストールしてください。

       注釈:
          groonga-munin-pluginsパッケージはmunin-nodeパッケージを必要としますが、munin-nodeパッ
          ケージはCentOSの公式リポジトリには含まれていません。munin-nodeパッケージを yum でインス
          トールするために EPEL リポジトリを有効にする必要があります。

          EPELリポジトリを有効にする(環境非依存):

              % sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

       groonga-munin-pluginsパッケージのインストール:

          % sudo yum install -y groonga-munin-plugins

       MySQL互換のノーマライザーをGroongaのプラグインとして提供するパッケージがあります。MySQL互
       換のノーマライザーを使うには  groonga-normalizer-mysql  パッケージをインストールしてくださ
       い。

       groonga-normalizer-mysqlパッケージのインストール:

          % sudo yum install -y groonga-normalizer-mysql

   CentOS 7
       インストール:

          % sudo yum install -y http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
          % sudo yum install -y groonga

       注釈:
          groonga パッケージは全文検索のための最小構成パッケージです。Groongaをサーバー用途で使う
          なら、設定済みの追加パッケージをインストールすることができます。

          サーバー用途のための2つのパッケージがあります。

          · groonga-httpd (nginxを元にしたHTTPサーバー)

          · groonga-server-gqtp (GQTPサーバー)

          詳細は /server を参照してください。

       MeCab  をトークナイザーとして使いたいときは、groonga-tokenizer-mecabパッケージをインストー
       ルしてください。

       groonga-tokenizer-mecabパッケージのインストール:

          % sudo yum install -y groonga-tokenizer-mecab

       Munin   プラグインを提供するパッケージもあります。MuninでGroongaの状態をモニターしたい場合
       は、groonga-munin-pluginsパッケージをインストールしてください。

       注釈:
          groonga-munin-pluginsパッケージはmunin-nodeパッケージを必要としますが、munin-nodeパッ
          ケージはCentOSの公式リポジトリには含まれていません。munin-nodeパッケージを yum でインス
          トールするために EPEL リポジトリを有効にする必要があります。

          EPELリポジトリを有効にする:

              % sudo yum install -y epel-release

       groonga-munin-pluginsパッケージのインストール:

          % sudo yum install -y groonga-munin-plugins

       MySQL互換のノーマライザーをGroongaのプラグインとして提供するパッケージがあります。MySQL互
       換のノーマライザーを使うには  groonga-normalizer-mysql  パッケージをインストールしてくださ
       い。

       groonga-normalizer-mysqlパッケージのインストール:

          % sudo yum install -y groonga-normalizer-mysql

   ソースからビルド
       Groongaをビルドするために必要なパッケージをインストールします:

          % sudo yum install -y wget tar gcc-c++ make mecab-devel

       ソースをダウンロードします:

          % wget http://packages.groonga.org/source/groonga/groonga-6.0.1.tar.gz
          % tar xvzf groonga-6.0.1.tar.gz
          % cd groonga-6.0.1

       configureを実行します( configure のオプションについては source-configure を参照してくださ
       い):

          % ./configure

       ビルド:

          % make -j$(grep '^processor' /proc/cpuinfo | wc -l)

       インストール:

          % sudo make install

   Fedora
       このセクションではFedora上でGroonga関連のRPMパッケージをインストールする方法を説明しま
       す。これらのパッケージは yum でインストールできます。

       注釈:
          3.0.2のリリースから、Groonga関連のRPMパッケージはFedoraの公式yumリポジトリでリリースし
          ています。GroongaのyumリポジトリのかわりにFedoraの公式リポジトリを使います。ただ、いく
          つか例外があって、MeCabの辞書(  mecab-ipadicmecab-jumandic  )パッケージを使うに
          はGroongaのyumリポジトリを使います。

       32-bit用と64-bit用のパッケージを配布していますが、サーバ用途には64-bitパッケージを利用する
       ことをオススメします。32-bit用パッケージはテスト用か開発用にだけ使って下さい。32-bit用パッ
       ケージを使った場合は、中程度のサイズのデータでもメモリ不足エラーになることがあります。

   Fedora 21
       インストール:

          % sudo yum install -y groonga

       mecab-ipadicmecab-jumandic といったパッケージを使うには Groongaのyumリポジトリを提供す
       る groonga-release パッケージをあらかじめインストールします。

          % sudo rpm -ivh http://packages.groonga.org/fedora/groonga-release-1.1.0-1.noarch.rpm
          % sudo yum update

       注釈:
          groonga パッケージは全文検索のための最小構成パッケージです。Groongaをサーバー用途で使う
          なら、設定済みの追加パッケージをインストールすることができます。

          サーバー用途のための2つのパッケージがあります。

          · groonga-httpd (nginxを元にしたHTTPサーバー)

          · groonga-server-gqtp (GQTPサーバー)

          詳細は /server を参照してください。

       MeCab  をトークナイザーとして使いたいときは、groonga-tokenizer-mecabパッケージをインストー
       ルしてください。

       groonga-tokenizer-mecabパッケージのインストール:

          % sudo yum install -y groonga-tokenizer-mecab

       それからMeCabの辞書をインストールします。(mecab-ipadicもしくはmecab-jumandic)

       IPA辞書をインストールします:

          % sudo yum install -y mecab-ipadic

       あるいはJuman辞書をインストールします:

          % sudo yum install -y mecab-jumandic

       Munin   プラグインを提供するパッケージもあります。MuninでGroongaの状態をモニターしたい場合
       は、groonga-munin-pluginsパッケージをインストールしてください。

       groonga-munin-pluginsパッケージのインストール:

          % sudo yum install -y groonga-munin-plugins

       MySQL互換のノーマライザーをGroongaのプラグインとして提供するパッケージがあります。MySQL互
       換のノーマライザーを使うには  groonga-normalizer-mysql  パッケージをインストールしてくださ
       い。

       groonga-normalizer-mysqlパッケージのインストール:

          % sudo yum install -y install groonga-normalizer-mysql

   ソースからビルド
       Groongaをビルドするために必要なパッケージをインストールします:

          % sudo yum install -y wget tar gcc-c++ make mecab-devel libedit-devel

       ソースをダウンロードします:

          % wget http://packages.groonga.org/source/groonga/groonga-6.0.1.tar.gz
          % tar xvzf groonga-6.0.1.tar.gz
          % cd groonga-6.0.1

       configureを実行します( configure のオプションについては source-configure を参照してくださ
       い):

          % ./configure

       ビルド:

          % make -j$(grep '^processor' /proc/cpuinfo | wc -l)

       インストール:

          % sudo make install

   Oracle Solaris
       このセクションではOracle  Solaris上でGroongaをソースコードからインストールする方法を説明し
       ます。

   Oracle Solaris 11
       Groongaをビルドするために必要なパッケージをインストールします:

          % sudo pkg install gnu-tar gcc-45 system/header

       ソースをダウンロードします:

          % wget http://packages.groonga.org/source/groonga/groonga-6.0.1.tar.gz
          % gtar xvzf groonga-6.0.1.tar.gz
          % cd groonga-6.0.1

       CFLAGS="-m64" CXXFLAGS="-m64"  変数付きでconfigureを実行します。これらの変数は64-bit版をビ
       ルドするために必要です。32-bit版をビルドする場合はこれらの変数を指定しないでしてください。
       ( configure のオプションについては source-configure を参照してください):

          % ./configure CFLAGS="-m64" CXXFLAGS="-m64"

       ビルド:

          % make

       インストール:

          % sudo make install

   その他
       このセクションではUNIX系の環境でGroongaをソースコードからインストールする方法を説明しま
       す。

       /install  にある特定環境用のドキュメントに、その環境向けのより詳細な情報があります。特定環
       境用のドキュメントがある場合は、まずそちらを参照してください。

   依存関係
       Groongaは特別なライブラリを必要としませんが、いくつかビルドに必要なツールがあります。

   ツール
       以下が必要なツールです:

          · wgetcurl または Web ブラウザ(ソースアーカイブをダウンロードするため)

          · targzip (ソースアーカイブを展開するため)

          · シェル( dashbashzsh など、どのようなシェルでもたぶん大丈夫)

          · CコンパイラーとC++コンパイラー ( gccg++ がサポート対象だが、他のコンパイラーでも
            たぶん大丈夫)

          · make (GNU makeがサポート対象だが、BSD makeなど他のmakeでもたぶん大丈夫)

       これらを用意してください。

       シェルの代わりに CMake を使うこともできますが、このドキュメントではCMakeを使ってビルドする
       方法については説明しません。

       以下はあるとよいツールです:

          · pkg-config (ライブラリを検出するため)

          · sudo (ビルドしたGroongaをインストールするため)

       追加のライブラリを使いたい場合はこれらのツールを用意しておかなければいけません。

   ライブラリ
       どのライブラリも必須ではありません。以下はオプションとして使えるライブラリです:

          · MeCab (全文検索対象のドキュメントを形態素解析でトークナイズするため)

          · KyTea (全文検索対象のドキュメントを形態素解析でトークナイズするため)

          · ZeroMQ/reference/suggest 用)

          · libevent/reference/suggest 用)

          · MessagePack (MessagePack出力サポート用および /reference/suggest 用)

          · libedit/reference/executables/groonga のコマンドライン編集用)

          · zlib (カラム値の圧縮用)

          · LZ4 (カラム値の圧縮用)

       これらのライブラリを使いたい場合は、Groongaをインストールする前にライブラリをインストール
       してください。

   ソースからビルド
       GroongaはGNUビルドシステムを使っています。以下は一番簡単なビルド手順です:

          % wget http://packages.groonga.org/source/groonga/groonga-6.0.1.tar.gz
          % tar xvzf groonga-6.0.1.tar.gz
          % cd groonga-6.0.1
          % ./configure
          % make
          % sudo make install

       上記の手順を実行すると  /usr/local/bin/groonga/reference/executables/groonga がインス
       トールされます。

       デフォルトのビルドでもうまく動くでしょうが、 configure のときにGroongaをカスタマイズするこ
       とができます。

       以下、それぞれの手順の詳細を説明します。

   configure
       まず configure を実行します。重要な configure のオプションは以下の通りです:

   --prefix=PATH
       インストール先となるディレクトリを指定します。Groonga関連のファイルは  ${PATH}/ ディレクト
       リ以下にインストールされます。

       デフォルトは    /usr/local    。デフォルトの場合は    /reference/executables/groonga/usr/local/bin/groonga にインストールされます。

       以下はシステム全体にGroongaをインストールするのではなく、ユーザーが個人で使う目的で
       ~/local にインストールする例です:

          % ./configure --prefix=$HOME/local

   --localstatedir=PATH
       ログファイル、PIDファイル、データベースなど頻繁に変更されるファイルを置くディレクトリを指
       定します。たとえば、ログファイルは ${PATH}/log/groonga.log に置かれます。

       デフォルトは /usr/local/var です。

       以下は頻繁に変更されるファイルをシステム全体で使う領域である /var に置く例です:

          % ./configure --localstatedir=/var

   --with-log-path=PATH
       ログファイルのデフォルトのパスを指定します。ログファイルのデフォルトのパスは
       /reference/executables/groonga--log-path  コマンドラインオプションで変更できます。その
       ため、このオプションはそんなに重要なビルドオプションではありません。少し便利にするためのオ
       プションです。

       デフォルトは /usr/local/var/log/groonga.log です。 /usr/local/var の部分は --localstatedir
       オプションで変更できます。

       以下はログファイルを共有しているNFSディレクトリ /nfs/log/groonga.log に置く例です:

          % ./configure --with-log-path=/nfs/log/groonga.log

   --with-default-encoding=ENCODING
       デフォルトのエンコーディングを指定します。有効なエンコーディングは  euc_jpsjisutf8latin1koi8rnone です。

       デフォルトは utf-8 です。

       以下はデフォルトのエンコーディングとしてShift_JISを使う例です:

          % ./configure --with-default-encoding=sjis

   --with-match-escalation-threshold=NUMBER
       マッチ演算でエスカレーションをするかどうかのデフォルトの閾値を指定します。この閾値について
       は  select-match-escalation-threshold を参照してください。-1はマッチ演算でエスカレーション
       しないという意味です。

       デフォルトは0です。

       以下はデフォルトではマッチエスカレーションをしないという例です:

          % ./configure --with-match-escalation-threshold=-1

   --with-zlib
       zlibを使ってカラム値を圧縮する機能を有効にします。

       デフォルトでは無効です。

       以下はzlibを使ってカラム値を圧縮する機能を有効にする例です:

          % ./configure --with-zlib

   --with-lz4
       LZ4を使ってカラム値を圧縮する機能を有効にします。

       デフォルトでは無効です。

       以下はLZ4を使ってカラム値を圧縮する機能を有効にする例です:

          % ./configure --with-lz4

   --with-message-pack=MESSAGE_PACK_INSTALL_PREFIX
       MessagePackがどこにインストールされているかを指定します。MessagePackを --prefix=/usr  とい
       う configure オプションでインストールしていない場合は、MessagePackをビルドするときに指定し
       たパスをこのオプションで指定してください。

       もし、MessagePackを --prefix=$HOME/local という configure オプションでインストールした場合
       は、Groongaの configure では --with-message-pack=$HOME/local と指定してください。

       デフォルトは /usr です。

       以下はMessagePackが --prefix=$HOME/local という configure オプションでインストールされてい
       る場合の例です:

          % ./configure --with-message-pack=$HOME/local

   --with-munin-plugins
       Groonga用のMuninプラグインをインストールします。プラグインは
       ${PREFIX}/share/groonga/munin/plugins/ 以下にインストールされます。

       デフォルトではプラグインはインストールされません。

       以下はGroonga用のMuninプラグインをインストールする例です:

          % ./configure --with-munin-plugins

   --with-package-platform=PLATFORM
       initスクリプトなどプラットフォーム依存のシステム管理ファイルをインストールします。利用可能
       なプラットフォームは redhatfedora です。 redhat はRed  HatおよびCentOSなどのRed  Hatク
       ローンのディストリビューション用です。 fedora はFedora用です。

       デフォルトではシステム管理ファイルはインストールされません。

       以下はCentOS用のシステム管理ファイルをインストールする例です:

          % ./configure --with-package-platform=redhat

   --help
       すべての configure オプションを表示します。

   make
       configure が成功したら make でGroongaをビルドします:

          % make

       マルチコアCPUを使っている場合は -j オプションを使うとより速くmakeを実行できます。もし、4コ
       アのCPUを使っている場合は、 -j4 オプションを使うともっと速くビルドできます:

          % make -j4

       make で何かエラーが発生した場合は、そのエラーをレポートしてください: /contribution/report

   make install
       これでビルドしたGroongaをインストールできます!:

          % sudo make install

       ${PREFIX}     への書き込み権限がある場合は      sudo      を使う必要はありません。例えば、
       --prefix=$HOME/local と指定した場合です。この場合は make install を使ってください:

          % make install

コミュニティ

       Groongaに関する情報を共有するための場所がいくつかあります。あなたの参加をお待ちしていま
       す!

   メーリングリスト
       Groongaに関する話題を扱うメーリングリストがあります。

       英語   groonga-talk@lists.sourceforge.net

       日本語 groonga-dev@lists.osdn.me

   チャットルーム
       Groongaに関する話題を扱うチャットルームがあります。

       英語   Gitterにあるgroonga/enチャットルーム

       日本語 Gitterにあるgroonga/jaチャットルーム

   Twitter
       @groonga がGroonga関連情報をツイートしています。

       このアカウントをフォローして最新のGroonga関連情報をゲットしてください!

   Facebook
       FacebookのGroongaページ ではGroonga関連情報をシェアしています。

       このページをいいね!して最新のGroonga関連情報をゲットしてください!

チュートリアル

   基本的な操作
       Groongaには、Cのライブラリとして使用する方法と、groonga実行ファイルを通して使用する方法が
       あります。本チュートリアルでは、groonga実行ファイルを使用する方法について説明しま
       す。groonga実行ファイルを使って、データベースの作成・操作・サーバの起動・サーバへの接続な
       どの操作が行えます。

   データベースの作成
       Groongaユーザへの第一歩はデータベースの作成です。まずは以下の書式をご覧ください。

       書式:

          groonga -n DB_PATH

       -n オプションは、データベースの作成を指示します。DB_PATHは、新しく作成するデータベースのパ
       スを指定します。データベースは複数のファイルによって構成されるため、正確には、データベース
       の入り口となるファイルのパスとして使用されます。また、データベースを構成する他のファイルに
       ついては、DB_PATHがパスのプレフィックスとして使用されます。指定されたパスにファイルが存在
       しているときは失敗するので注意してください(失敗例:  db  open  failed  (DB_PATH):  syscall
       error 'DB_PATH' (ファイルが存在します)。  次の章で、既存のデータベースを開く方法を説明しま
       す)。

       上記のコマンドは、データベースを作成してから、コマンドの入力を受け付ける対話モードに入りま
       す。Ctrlキーを押しながらdキーを押すと、対話モードから抜けることができます。

       実行例:

          % groonga -n /tmp/groonga-databases/introduction.db

       データベースの作成に成功すれば、/tmp/groonga-databases以下にデータベースを構成するファイル
       が配置されます。

   データベースの操作
       以下の書式は、既存のデータベースを操作する方法を示しています。

       書式:

          groonga DB_PATH [COMMAND]

       DB_PATHには操作対象のデータベースを指定します。指定したデータベースが存在しないときは失敗
       します。

       COMMAND が指定された場合、COMMAND を実行した後、実行結果を返します。指定されなかった場合に
       は、対話モードに入ります。対話モードでは、標準入力からコマンドを読み込み、順次実行しま
       す。本チュートリアルでは、対話モードを主に使用します。

       それでは、 /reference/commands/status  コマンドを実行して、Groongaの実行状態を確認してみま
       しょう。

       実行例:

          % groonga /tmp/groonga-databases/introduction.db
          status
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   {
          #     "uptime": 0,
          #     "max_command_version": 2,
          #     "n_queries": 0,
          #     "cache_hit_rate": 0.0,
          #     "version": "5.0.6-128-g8029ddb",
          #     "alloc_count": 206,
          #     "command_version": 1,
          #     "starttime": 1439995916,
          #     "default_command_version": 1
          #   }
          # ]

       以上のように、コマンドの実行結果は基本的にjson形式の配列として返却されます。配列の先頭に
       は、エラーコードや実行時間などの情報が入ります。2番目の要素には、指示された操作の実行結果
       が入ります。

       注釈:
          他のツールを使うことで、JSONを整形できます。例えば、  grnwrapGrnlinejq などが使
          えます。

   コマンドの書式
       データベースを操作するコマンドには、以下の書式で引数を与えます。:

          Form_1: COMMAND VALUE_1 VALUE_2 ..

          Form_2: COMMAND --NAME_1 VALUE_1 --NAME_2 VALUE_2 ..

       書式1では値を適切な順番で渡す必要があります。このような引数は、位置によって値の意味が決ま
       るため、位置固定引数などと呼ばれることもあります。

       書式2では値を名前と一緒に渡します。そのため、任意の順序で引数を指定することができます。こ
       のような引数は、名前付き引数やキーワード引数と呼ばれることもあります。

       空白や特殊な記号(ダブルクォート、シングルクォート、および丸括弧)を含む値を指定したいとき
       は、シングルクォート(')かダブルクォート(")で値を囲むようにしてください。

       詳しくは、 /reference/executables/groonga のコマンドの項を参考にしてください。

   主なコマンド
          /reference/commands/status
                 Groongaプロセスの状態を表示します。

          /reference/commands/table_list
                 データベースに定義されているテーブルのリストを表示します。

          /reference/commands/column_list
                 テーブルに定義されているカラムのリストを表示します。

          /reference/commands/table_create
                 データベースにテーブルを追加します。

          /reference/commands/column_create
                 テーブルにカラムを追加します。

          /reference/commands/select
                 テーブルに含まれるレコードを検索して表示します。

          /reference/commands/load
                 テーブルにレコードを挿入します。

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

       Groongaのテーブルには基本的に主キーが必要であり、テーブルを作成する際には型と格納方法も併
       せて指定する必要があります。

       型には数値や文字列などがあります。ここではデータの種類を表しているものという程度に考えてく
       ださい。詳細は /reference/types に記述されています。主キーの格納方法は、主キーを条件とする
       検索にかかる時間や、前方一致検索の可否などを左右します。こちらも後で説明します。

       それでは、テーブルを作成してみましょう。以下の例では、主キーのあるテーブルを作成します。
       name 引数はテーブルの名前を指定します。 flags 引数は主キーの格納方法を指定するために使って
       います。 key_type 引数は主キーの型を指定します。

       実行例:

          table_create --name Site --flags TABLE_HASH_KEY --key_type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       実行結果の第2要素は、操作が成功したことを示しています。

   テーブルの表示
       /reference/commands/select コマンドを用いて、テーブルの中身を表示することができます。

       実行例:

          select --table Site
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         0
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ]
          #       ]
          #     ]
          #   ]
          # ]

       /reference/commands/selecttable 引数のみを指定すると、指定したテーブルの中身を10件まで
       表示します。実行結果の[0]はテーブルに含まれるレコードの数を示しています。今回は何も登録さ
       れていないため0件です。レコード数の次に表示されている配列はテーブルの構成を示していま
       す。["_id","Uint32"]はUInt32型の値を持つ_idという名前のカラ
       ム、["_key","ShortText"]はShortText型の値を持つ_keyという名前のカラムをそれぞれ表していま
       す。

       上記の_idカラムと_keyカラムの2つのカラムは必須のカラムです。_idカラムはGroongaが自動的に割
       り当てるIDを格納します。_keyカラムは主キーを格納します。これらのカラム名を変更することはで
       きません。

   カラムの作成
       /reference/commands/column_create コマンドを用いて、カラムを作成することができます。

       それでは、カラムを作成してみましょう。以下の例では、新しいカラムをSiteテーブルに追加しま
       す。 table 引数はテーブルの名前を指定します。 name  引数は新しいカラムの名前を指定します。
       type 引数はカラムに格納する値の型を指定します。

       実行例:

          column_create --table Site --name title --type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          select --table Site
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         0
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ]
          #     ]
          #   ]
          # ]

   データのロード
       /reference/commands/load コマンドは、JSON形式のレコードを受け取り、テーブルに格納します。

       以下の例では9つのレコードをSiteテーブルに格納します。

       実行例:

          load --table Site
          [
          {"_key":"http://example.org/","title":"This is test record 1!"},
          {"_key":"http://example.net/","title":"test record 2."},
          {"_key":"http://example.com/","title":"test test record three."},
          {"_key":"http://example.net/afr","title":"test record four."},
          {"_key":"http://example.org/aba","title":"test test test record five."},
          {"_key":"http://example.com/rab","title":"test test test test record six."},
          {"_key":"http://example.net/atv","title":"test test test record seven."},
          {"_key":"http://example.org/gat","title":"test test record eight."},
          {"_key":"http://example.com/vdw","title":"test test record nine."},
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 9]

       実行結果の第2要素はロードされたレコードの数を示しています。上記の操作では、すべてのレコー
       ドを問題なくロードできています。

       念のため、データが入っていることを確認してみましょう。

       実行例:

          select --table Site
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         9
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "http://example.org/",
          #         "This is test record 1!"
          #       ],
          #       [
          #         2,
          #         "http://example.net/",
          #         "test record 2."
          #       ],
          #       [
          #         3,
          #         "http://example.com/",
          #         "test test record three."
          #       ],
          #       [
          #         4,
          #         "http://example.net/afr",
          #         "test record four."
          #       ],
          #       [
          #         5,
          #         "http://example.org/aba",
          #         "test test test record five."
          #       ],
          #       [
          #         6,
          #         "http://example.com/rab",
          #         "test test test test record six."
          #       ],
          #       [
          #         7,
          #         "http://example.net/atv",
          #         "test test test record seven."
          #       ],
          #       [
          #         8,
          #         "http://example.org/gat",
          #         "test test record eight."
          #       ],
          #       [
          #         9,
          #         "http://example.com/vdw",
          #         "test test record nine."
          #       ]
          #     ]
          #   ]
          # ]

   レコードの取得
       /reference/commands/select コマンドを用いて、テーブルの中身を表示することができます。

       query 引数を使って検索条件が指定された場合、 /reference/commands/select コマンドは検索条件
       に適合するレコードを検索し、検索結果を出力します。

       それでは、IDを指定してレコードを取り出してみましょう。以下の例では、Siteテーブルの先頭レ
       コードを取り出します。正確には、 query 引数を使って _id  カラムに1が格納されているレコード
       を要求しています。

       実行例:

          select --table Site --query _id:1
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "http://example.org/",
          #         "This is test record 1!"
          #       ]
          #     ]
          #   ]
          # ]

       次に、主キーを指定してレコードを取り出してみましょう。以下の例では、主キーが            "‐
       http://example.org/" のキーを取り出します。正確には、 query 引数を使って _key カラムに  "‐
       http://example.org/" が格納されているレコードを要求しています。

       実行例:

          select --table Site --query '_key:"http://example.org/"'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "http://example.org/",
          #         "This is test record 1!"
          #       ]
          #     ]
          #   ]
          # ]

   全文検索用の語彙表の作成
       そろそろ全文検索の使い方について見ていきましょう。

       Groongaでは転置インデックスを使って高速な全文検索を実現しています。そのため、まずは転置イ
       ンデックスとして用いるテーブルを作成する必要があります。テーブルの内容は、文書に含まれる単
       語やN-gramなどの索引語を主キーとして、各カラムに索引語の位置情報を格納するという構成になり
       ます。結果として、主キーのカラムは全文検索における語彙表の役割を果たします。

       以下の例では、Termsという名前のテーブルを転置インデックスの語彙表として作成しています。索
       引語を格納するため、主キーの型はShortTextです。

       実行例:

          table_create --name Terms --flags TABLE_PAT_KEY --key_type ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       /reference/commands/table_create  には多くの引数が指定されているものの、本チュートリアルで
       はすべてを理解する必要はありません。以下に簡単な説明を述べますが、読み飛ばしてもらってかま
       いません。

       TABLE_PAT_KEYフラグは、主キーをパトリシア木に格納することを指示しています。
       default_tokenizer 引数には、検索対象の文書をトークナイズする方式を指定するようになっていま
       す。上記の例では、一般的にN-gramと呼ばれるインデックス方式に対応するTokenBigramを指定して
       います。

       normalizer 引数はインデックスの単語をノーマライズするかどうかを指定しています。

   全文検索用のインデックスカラムの作成
       次に必要なのは、インデックス型のカラムを作成することです。このカラムは、関連付けられたカラ
       ムに対する全文検索に利用されます。つまり、全文検索を行いたいカラムに対してインデックスを作
       成することに相当します。

       それでは、インデックスカラムを作成してみましょう。以下の例では、Siteテーブルのカラムに対す
       るインデックスカラムを作成します。それでは、Siteテーブルのtitleカラムを全文検索の対象とす
       るべく、インデックス型のカラムを作成してみましょう。

       実行例:

          column_create --table Terms --name blog_title --flags COLUMN_INDEX|WITH_POSITION --type Site --source title
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       table 引数は語彙表を指定し、 name 引数はインデックスカラムを指定します。また、 type 引数は
       インデックスの対象となるテーブルを指定し、 source 引数はインデックスの対象となるカラムを指
       定します。COLUMN_INDEXフラグはインデックスカラムの作成を指示し、WITH_POSITIONフラグは各索
       引語の位置情報をインデックスに含めることを指示します。一般的な全文検索インデックスを作成し
       たいときは、COLUMN_INDEX|WITH_POSITIONを指定してください。索引語の位置情報については、本
       チュートリアルでは触れません。

       注釈:
          語彙表とインデックスカラムを作成するタイミングは、データをロードする前後のどちらでも問
          題ありません。データをロードした後でインデックスを作成し、さらに新しいデータをロードす
          ることもできます。インデックスの作成を指示したタイミングでレコードが既に存在するとき
          は、静的にインデックスを作成します。一方、インデックスを作成した後で追加されたレコード
          については、動的にインデックスを更新します。

   全文検索
       インデックスを作成したことにより、 /reference/commands/select コマンドによる全文検索が可能
       になります。

       全文検索のクエリは   query   引数により指定することができます。以下の例では、titleカラムに
       "this"  という文字列が含まれているレコードを検索します。 query 引数に含まれる '@' は、全文
       検索を指示しています。語彙表の作成において NormalizerAuto を指定したときは、全角・半角や大
       文字・小文字などの違いが吸収されることに注意してください。

       実行例:

          select --table Site --query title:@this
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "http://example.org/",
          #         "This is test record 1!"
          #       ]
          #     ]
          #   ]
          # ]

       上記の例では、"This" という単語を含む先頭レコードのみが検索条件に適合します。

       /reference/commands/select  コマンドには、  match_columns という引数が存在します。このパラ
       メータはデフォルトで検索対象にするカラムを指定するもので、カラム名を指定しない検索条件にの
       み適用されます。 [1]

       "--match_columns title" と "--query this" の組み合わせを指定すると、 "--query title:@this"
       を指定したときと同じ検索条件になります。

       実行例:

          select --table Site --match_columns title --query this
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "http://example.org/",
          #         "This is test record 1!"
          #       ]
          #     ]
          #   ]
          # ]

   出力カラムの指定
       /reference/commands/select コマンドにおいて output_columns  引数を用いることで、検索結果に
       含めるカラムを指定することができます。複数のカラムを指定するときは、カンマ(,)区切りでカ
       ラムを列挙します。

       実行例:

          select --table Site --output_columns _key,title,_score --query title:@test
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         9
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "http://example.org/",
          #         "This is test record 1!",
          #         1
          #       ],
          #       [
          #         "http://example.net/",
          #         "test record 2.",
          #         1
          #       ],
          #       [
          #         "http://example.com/",
          #         "test test record three.",
          #         2
          #       ],
          #       [
          #         "http://example.net/afr",
          #         "test record four.",
          #         1
          #       ],
          #       [
          #         "http://example.org/aba",
          #         "test test test record five.",
          #         3
          #       ],
          #       [
          #         "http://example.com/rab",
          #         "test test test test record six.",
          #         4
          #       ],
          #       [
          #         "http://example.net/atv",
          #         "test test test record seven.",
          #         3
          #       ],
          #       [
          #         "http://example.org/gat",
          #         "test test record eight.",
          #         2
          #       ],
          #       [
          #         "http://example.com/vdw",
          #         "test test record nine.",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

       上記の例では、_scoreカラムを含む3つのカラムを指定しています。_scoreカラムはGroongaの検索結
       果に含まれるカラムであり、全文検索の条件に合致するレコードほど高い数値が入ります。

   表示範囲指定
       /reference/commands/select コマンドにおいて offset 引数と limit 引数を用いることで、検索結
       果の一部のみを表示することができます。大量の検索結果を分割してページ単位で表示したい場合な
       どに有用です。

       offset 引数には、検索結果における始点を指定します。検索結果の1件目が必要な場合、 offset 引
       数を省略するか、0を指定するようにしてください。 limit 引数には、検索結果の表示件数を指定し
       ます。

       実行例:

          select --table Site --offset 0 --limit 3
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         9
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "http://example.org/",
          #         "This is test record 1!"
          #       ],
          #       [
          #         2,
          #         "http://example.net/",
          #         "test record 2."
          #       ],
          #       [
          #         3,
          #         "http://example.com/",
          #         "test test record three."
          #       ]
          #     ]
          #   ]
          # ]
          select --table Site --offset 3 --limit 3
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         9
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         4,
          #         "http://example.net/afr",
          #         "test record four."
          #       ],
          #       [
          #         5,
          #         "http://example.org/aba",
          #         "test test test record five."
          #       ],
          #       [
          #         6,
          #         "http://example.com/rab",
          #         "test test test test record six."
          #       ]
          #     ]
          #   ]
          # ]
          select --table Site --offset 7 --limit 3
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         9
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         8,
          #         "http://example.org/gat",
          #         "test test record eight."
          #       ],
          #       [
          #         9,
          #         "http://example.com/vdw",
          #         "test test record nine."
          #       ]
          #     ]
          #   ]
          # ]

   検索結果の並べ替え
       /reference/commands/select  コマンドに sortby 引数を渡すことにより、検索結果を並べ替えるこ
       とができます。

       sortby  引数には、整列の基準として用いるカラムを指定します。検索結果は指定したカラムの値が
       昇順になるように並べ替えられます。  sortby 引数の中でカラム名の前にハイフン(-)を付けるこ
       とにより、降順に並べ替えることもできます。

       以下の例では、Siteテーブルのレコードを逆順に表示しています。

       実行例:

          select --table Site --sortby -_id
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         9
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         9,
          #         "http://example.com/vdw",
          #         "test test record nine."
          #       ],
          #       [
          #         8,
          #         "http://example.org/gat",
          #         "test test record eight."
          #       ],
          #       [
          #         7,
          #         "http://example.net/atv",
          #         "test test test record seven."
          #       ],
          #       [
          #         6,
          #         "http://example.com/rab",
          #         "test test test test record six."
          #       ],
          #       [
          #         5,
          #         "http://example.org/aba",
          #         "test test test record five."
          #       ],
          #       [
          #         4,
          #         "http://example.net/afr",
          #         "test record four."
          #       ],
          #       [
          #         3,
          #         "http://example.com/",
          #         "test test record three."
          #       ],
          #       [
          #         2,
          #         "http://example.net/",
          #         "test record 2."
          #       ],
          #       [
          #         1,
          #         "http://example.org/",
          #         "This is test record 1!"
          #       ]
          #     ]
          #   ]
          # ]

       次の例では、_scoreカラムを整列の基準とすることにより、検索結果のランキングをおこなっていま
       す。検索結果はクエリとの関連性が高い順に並べ替えられます。

       実行例:

          select --table Site --query title:@test --output_columns _id,_score,title --sortby -_score
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         9
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         6,
          #         4,
          #         "test test test test record six."
          #       ],
          #       [
          #         5,
          #         3,
          #         "test test test record five."
          #       ],
          #       [
          #         7,
          #         3,
          #         "test test test record seven."
          #       ],
          #       [
          #         8,
          #         2,
          #         "test test record eight."
          #       ],
          #       [
          #         3,
          #         2,
          #         "test test record three."
          #       ],
          #       [
          #         9,
          #         2,
          #         "test test record nine."
          #       ],
          #       [
          #         1,
          #         1,
          #         "This is test record 1!"
          #       ],
          #       [
          #         4,
          #         1,
          #         "test record four."
          #       ],
          #       [
          #         2,
          #         1,
          #         "test record 2."
          #       ]
          #     ]
          #   ]
          # ]

       整列の基準となるカラムを複数指定したいときは、カンマ(,)区切りでカラムを列挙します。複数
       のカラムを指定したときは、最初のカラムを基準として整列した後、最初のカラムに同じ値が格納さ
       れているレコードを次のカラムを基準として整列します。

       実行例:

          select --table Site --query title:@test --output_columns _id,_score,title --sortby -_score,_id
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         9
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         6,
          #         4,
          #         "test test test test record six."
          #       ],
          #       [
          #         5,
          #         3,
          #         "test test test record five."
          #       ],
          #       [
          #         7,
          #         3,
          #         "test test test record seven."
          #       ],
          #       [
          #         3,
          #         2,
          #         "test test record three."
          #       ],
          #       [
          #         8,
          #         2,
          #         "test test record eight."
          #       ],
          #       [
          #         9,
          #         2,
          #         "test test record nine."
          #       ],
          #       [
          #         1,
          #         1,
          #         "This is test record 1!"
          #       ],
          #       [
          #         2,
          #         1,
          #         "test record 2."
          #       ],
          #       [
          #         4,
          #         1,
          #         "test record four."
          #       ]
          #     ]
          #   ]
          # ]
       脚注

       [1]  現在のバージョンでは、全文検索インデックスが存在する場合にのみ、 match_columns 引数を
            利用することができます。通常のカラムでの絞り込みには利用できません。

   リモートアクセス
       Groongaをサーバとして起動することにより、ネットワークを介してデータベースにアクセスできる
       ようになります。Groongaがサポートしているプロトコルは、Groongaの専用プロトコルであ
       るGQTP、memcachedバイナリプロトコル、HTTPの三種類です。

   HTTP
   HTTPサーバの起動
       GroongaはHTTPをサポートしています。以下の書式はHTTPサーバをデーモンとして起動する方法を示
       しています。

       書式:

          groonga [-p PORT_NUMBER] -d --protocol http DB_PATH

       --protocol            オプションとその引数により、サーバのプロトコルを指定することができま
       す。"http"はHTTPサーバの起動を指示しています。-p オプションを省略した場合は10041のポート番
       号が使用されます。

       以下のコマンドは、ポート番号80で待ち受けるHTTPサーバをデーモンとして起動します。

       実行例:

          % sudo groonga -p 80 -d --protocol http /tmp/groonga-databases/introduction.db
          %

       注釈:
          80番ポートで待ち受けるにはroot権限が必須です。1024番以降のポート番号にはそのような制限
          はありません。

   HTTPサーバへのコマンド送信
       GroongaがHTTPサーバとして起動されているときは、/d/COMMAND_NAME というURLにアクセスすること
       により、コマンドを実行することができます。コマンドの引数は、HTTPのGETパラメータとして渡し
       ます。引数の書式は "?NAME_1=VALUE_1&NAME_2=VALUE_2&..." となります。

       以下の例は、HTTPサーバに対するコマンドの送り方を示しています。

       実行例:

          http://HOST_NAME_OR_IP_ADDRESS[:PORT_NUMBER]/d/status
          Executed command:
          status
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   {
          #     "uptime": 0,
          #     "max_command_version": 2,
          #     "n_queries": 0,
          #     "cache_hit_rate": 0.0,
          #     "version": "5.0.6-128-g8029ddb",
          #     "alloc_count": 185,
          #     "command_version": 1,
          #     "starttime": 1439995935,
          #     "default_command_version": 1
          #   }
          # ]
          http://HOST_NAME_OR_IP_ADDRESS[:PORT_NUMBER]/d/select?table=Site&query=title:@this
          Executed command:
          select --table Site --query title:@this
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "country",
          #           "SiteCountry"
          #         ],
          #         [
          #           "domain",
          #           "SiteDomain"
          #         ],
          #         [
          #           "link",
          #           "Site"
          #         ],
          #         [
          #           "links",
          #           "Site"
          #         ],
          #         [
          #           "location",
          #           "WGS84GeoPoint"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "http://example.org/",
          #         "japan",
          #         ".org",
          #         "http://example.net/",
          #         [
          #           "http://example.net/",
          #           "http://example.org/",
          #           "http://example.com/"
          #         ],
          #         "128452975x503157902",
          #         "This is test record 1!"
          #       ]
          #     ]
          #   ]
          # ]

   ブラウザベースの管理ツール
       GroongaをHTTPサーバとして起動しているときは、ブラウザベースの管理ツールを使うことによ
       り、データベースを簡単に管理することができます。管理ツールを使いたいときは、ブラウザを使っ
       て http://HOST_NAME_OR_IP_ADDRESS[:PORT_NUMBER]/  へとアクセスしてください。管理ツールの使
       用には、JavaScriptの実行が有効になっている必要があります。

   セキュリティ
       Groongaのサーバには認証機能がありません。誰でもデータベースの内容を閲覧・修正することがで
       きます。iptablesなどを用いてアクセス元IPアドレスを制限することを推奨します。

   いろいろなデータの保存
       Groongaは全文検索エンジンを起源として独自のカラムストアを持つに至るわけですが、索引語や文
       書を保存するだけでなく、数値や文字列、日時や経緯度など、いろいろなデータを保存することがで
       きます。本チュートリアルでは、Groongaで保存できるデータの種類、および保存の方法を説明しま
       す。

   データの種類
       Groongaにおいて利用できる基本型は、真偽値、数値、文字列、日時、経緯度の5種類に大別できま
       す。基本型において、数値は整数・浮動小数点数の違い、符号の有無と割り当てるビット数によって
       細分化できるほか、文字列は長さの上限によって細分化できます。また、経緯度には測地系による分
       類があります。詳しくは /reference/types を参照してください。

       拡張型としては、別テーブルを参照するための情報であるテーブル参照を保存することができま
       す。また、基本型もしくはテーブル参照を複数まとめて保存できるように、ベクターカラムをサポー
       トしています。

       それでは、本チュートリアルで使用するテーブルを作成しておきましょう。

       実行例:

          table_create --name ToyBox --flags TABLE_HASH_KEY --key_type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]

   真偽値
       ブール型は真偽値(true/false)を表現するための型です。ブール型のカラムを作成するには、
       /reference/commands/column_create  コマンドの  type 引数に Bool を指定します。ブール型のデ
       フォルト値はfalseです。

       以下の例では、ブール型のカラムを作成し、3つのレコードを追加します。3番目のレコードについて
       は、値を省略しているため、デフォルト値が格納されます。

       実行例:

          column_create --table ToyBox --name is_animal --type Bool
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table ToyBox
          [
          {"_key":"Monkey","is_animal":true}
          {"_key":"Flower","is_animal":false}
          {"_key":"Block"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]
          select --table ToyBox --output_columns _key,is_animal
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "is_animal",
          #           "Bool"
          #         ]
          #       ],
          #       [
          #         "Monkey",
          #         true
          #       ],
          #       [
          #         "Flower",
          #         false
          #       ],
          #       [
          #         "Block",
          #         false
          #       ]
          #     ]
          #   ]
          # ]

   数値
       数値型は、整数と浮動小数点数に分けることができます。整数は、符号付き整数と符号なし整数に分
       けることができるだけでなく、割り当てるビット数によっても分けることができます。割り当てる
       ビット数を大きくすると、カラムのサイズは大きくなってしまいますが、表現できる整数の範囲を大
       きくすることができます。詳しくは /reference/types を参照してください。数値型のデフォルト値
       はいずれも0です。

       以下の例では、Int8型のカラムとFloat型のカラムを作成し、既存のレコードを更新します。
       /reference/commands/load    コマンドはweightカラムの値を期待したとおりに更新しています。一
       方、priceカラムに指定した小数については、小数点以下を切り捨てた値が格納されています。ま
       た、表現できる範囲を超える値を格納しようとした2番目のレコードについては、指定した値とは異
       なる値が格納されています。このように、表現できる範囲を超える値を指定すると、操作後の値は未
       定義になるので注意してください。

       実行例:

          column_create --table ToyBox --name price --type Int8
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table ToyBox --name weight --type Float
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table ToyBox
          [
          {"_key":"Monkey","price":15.9}
          {"_key":"Flower","price":200,"weight":0.13}
          {"_key":"Block","weight":25.7}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]
          select --table ToyBox --output_columns _key,price,weight
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "price",
          #           "Int8"
          #         ],
          #         [
          #           "weight",
          #           "Float"
          #         ]
          #       ],
          #       [
          #         "Monkey",
          #         15,
          #         0.0
          #       ],
          #       [
          #         "Flower",
          #         -56,
          #         0.13
          #       ],
          #       [
          #         "Block",
          #         0,
          #         25.7
          #       ]
          #     ]
          #   ]
          # ]

   文字列
       文字列型は、長さの上限によって分けることができます。詳しくは /reference/types を参照してく
       ださい。文字列型のデフォルト値は長さ0の文字列です。

       以下の例では、 ShortText 型のカラムを作成し、既存のレコードを更新します。3つ目のレコード(
       キーが "Block" のレコード)は更新していないのでデフォルト値(長さが0の文字列)になります。

       実行例:

          column_create --table ToyBox --name name --type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table ToyBox
          [
          {"_key":"Monkey","name":"Grease"}
          {"_key":"Flower","name":"Rose"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 2]
          select --table ToyBox --output_columns _key,name
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "name",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "Monkey",
          #         "Grease"
          #       ],
          #       [
          #         "Flower",
          #         "Rose"
          #       ],
          #       [
          #         "Block",
          #         ""
          #       ]
          #     ]
          #   ]
          # ]

   日時
       日時を表現するための型はTimeです。内部では1970年1月1日0時0分0秒を基準とする経過時間をマイ
       クロ秒単位で表現します。符号付きの整数を用いるため、1970年以前の日時も表現することができま
       す。内部表現はマイクロ秒単位の整数ですが、     /reference/commands/load     コマンドおよび
       /reference/commands/select  コマンドでは、経過秒数による指定・表示となります。デフォルト値
       は1970年1月1日0時0分0秒のことを表す0.0です。

       注釈:
          Groonga内部では経過秒数を整数のペアで保持しています。最初の整数で秒を表現し、もう一方で
          マイクロ秒を表現します。それゆえGroongaでは小数で経過秒数を表示します。整数部が秒数
          で、小数部はマイクロ秒の値です。

       以下の例では、 Time  型のカラムを作成し、既存のレコードを更新します。1つ目のレコード(キー
       が "Monkey" のレコード)は更新していないのでデフォルト値( 0.0 )になります。

       実行例:

          column_create --table ToyBox --name time --type Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table ToyBox
          [
          {"_key":"Flower","time":1234567890.1234569999}
          {"_key":"Block","time":-1234567890}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 2]
          select --table ToyBox --output_columns _key,time
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "time",
          #           "Time"
          #         ]
          #       ],
          #       [
          #         "Monkey",
          #         0.0
          #       ],
          #       [
          #         "Flower",
          #         1234567890.12346
          #       ],
          #       [
          #         "Block",
          #         -1234567890.0
          #       ]
          #     ]
          #   ]
          # ]

   経緯度
       経緯度を表現するための型は、測地系によって分けることができます。詳しくは  /reference/types
       を参照してください。経緯度の指定・表示には、以下に示す形式の文字列を使います。

       · "経度のミリ秒表記x緯度のミリ秒表記" (例: "128452975x503157902")

       · "経度の度数表記x緯度の度数表記" (例: "35.6813819x139.7660839")

       小数点を含んでいなければミリ秒表記、小数点を含んでいれば度数表記として扱われます。ミリ秒表
       記と度数表記を混ぜたときの動作は未定義なので注意してください。経度と緯度の区切りとして
       は、'x' のほかに ',' を使うことができます。経緯度のデフォルト値は "0x0" です。

       以下の例では、世界測地系を用いる WGS84GeoPoint  型のカラムを作成し、既存のレコードを更新し
       ます。2つ目のレコード(キーが    "Flower"   のレコード)は更新していないのでデフォルト値(
       "0x0" )になります。

       実行例:

          column_create --table ToyBox --name location --type WGS84GeoPoint
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table ToyBox
          [
          {"_key":"Monkey","location":"128452975x503157902"}
          {"_key":"Block","location":"35.6813819x139.7660839"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 2]
          select --table ToyBox --output_columns _key,location
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "location",
          #           "WGS84GeoPoint"
          #         ]
          #       ],
          #       [
          #         "Monkey",
          #         "128452975x503157902"
          #       ],
          #       [
          #         "Flower",
          #         "0x0"
          #       ],
          #       [
          #         "Block",
          #         "128452975x503157902"
          #       ]
          #     ]
          #   ]
          # ]

   テーブル参照
       Groongaでは、テーブル参照のカラム、すなわち関連付けたテーブルを参照するカラムを作成できま
       す。より正確には、カラム作成時に参照先となるテーブルとの関連付けをおこない、参照先テーブル
       におけるレコードIDを格納しておくことにより、参照先のレコードにアクセスできるようにします。

       テーブル参照のカラムがあるときは、 /reference/commands/select コマンドの output_columns 引
       数に  参照元カラム.参照先カラム と指定することにより、参照先カラムの値を取り出すことができ
       ます。参照元カラムのみを指定したときは、 参照元カラム名._key  と同様の扱いとなり、参照先レ
       コードの主キーが取り出されます。テーブル参照が有効なレコードを指していないときは、
       /reference/commands/select  コマンドは参照先カラムのデフォルト値を取り出すようになっていま
       す。

       ここでは、 tutorial-introduction-create-table で作成した Site テーブルに参照カラムを作成し
       ます。作成する参照カラムは link という名前にします。このカラムには Site テーブルのレコード
       間でのリンク関係を保存します。

       実行例:

          column_create --table Site --name link --type Site
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Site
          [
          {"_key":"http://example.org/","link":"http://example.net/"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 1]
          select --table Site --output_columns _key,title,link._key,link.title --query title:@this
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ],
          #         [
          #           "link._key",
          #           "ShortText"
          #         ],
          #         [
          #           "link.title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "http://example.org/",
          #         "This is test record 1!",
          #         "http://example.net/",
          #         "test record 2."
          #       ]
          #     ]
          #   ]
          # ]

       テーブル参照のカラムを作成するときは、  /reference/commands/column_create  コマンドの type
       引数に参照先テーブルを指定します。この例では、同じテーブルに含まれる別のレコードを参照させ
       たいので、Siteを指定することになります。次に、   /reference/commands/load   コマンドで  "‐
       http://example.org/" から "http://example.net/" へのリンクを登録しています。テーブル参照を
       作成するときは、IDではなく主キーを指定することに注意してください。最後に、
       /reference/commands/select            コマンドでリンクの内容を確認しています。この例では、
       output_columns 引数に link._key と link.title を指定しているので、参照先の主キーとタイトル
       が表示されています。

   ベクターカラム
       /reference/commands/column_create     コマンドでカラムを作成するとき、     flags      引数
       にCOLUMN_VECTORフラグを指定すると、   type  引数に指定した型の配列を格納するカラムになりま
       す。このようなカラムのことを、ベクターカラムと呼びます。ベクターカラムは、各レコードに複数
       の値を格納できるため、一対多の参照関係を表すのに便利です。

       さきほどテーブル参照の例として作成したカラムでは、各サイトに一つのリンクしか保存できません
       でした。通常は一つのサイトから多くのサイトにリンクが張られているので、これでは残念な仕様に
       なってしまいます。そこで、ベクターカラムを使って、複数のリンクを保存できるようにしてみま
       しょう。

       実行例:

          column_create --table Site --name links --flags COLUMN_VECTOR --type Site
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Site
          [
          {"_key":"http://example.org/","links":["http://example.net/","http://example.org/","http://example.com/"]},
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 1]
          select --table Site --output_columns _key,title,links._key,links.title --query title:@this
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ],
          #         [
          #           "links._key",
          #           "ShortText"
          #         ],
          #         [
          #           "links.title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "http://example.org/",
          #         "This is test record 1!",
          #         [
          #           "http://example.net/",
          #           "http://example.org/",
          #           "http://example.com/"
          #         ],
          #         [
          #           "test record 2.",
          #           "This is test record 1!",
          #           "test test record three."
          #         ]
          #       ]
          #     ]
          #   ]
          # ]

       新たなカラムにはSiteテーブルに対する参照の配列を格納するので、 type 引数にSiteを指定すると
       ともに、                 flags                 引数にCOLUMN_VECTORフラグを指定しています。
       /reference/commands/column_create コマンドの  type  パラメーターは前の例と同じです。次に、
       /reference/commands/load    コマンドによる更新では、    "http://example.org/"    から   "‐
       http://example.net/" へのリンクに加えて、 "http://example.org/"  と  "http://example.com/"
       へのリンクも登録しています。そして、最後に /reference/commands/select コマンドでリンクの内
       容を確認しています。この例では、 output_columns 引数に links._key と links.title  を指定し
       ているので、参照先の主キーとタイトルをそれぞれ配列にしたものが表示されています。

   さまざまな検索条件
       Groongaは、JavaScriptに似た文法での条件絞込や、計算した値を用いたソートを行うことができま
       す。また、位置情報(緯度・経度)を用いた絞込・ソートを行うことができます。

   JavaScriptに似た文法での絞込・全文検索
       select コマンドの filter パラメータは、レコードの検索条件を指定します。 filter  パラメータ
       と  query パラメータでは、 filter パラメータにはJavaScriptの式に似た文法で条件を指定する点
       が違います。

       実行例:

          select --table Site --filter "_id <= 1" --output_columns _id,_key
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "http://example.org/"
          #       ]
          #     ]
          #   ]
          # ]

       上記クエリの詳細をみてみましょう。 filter パラメータではこのように条件が指定されています:

          _id <= 1

       このケースでは、 _id の値が1以下であるという条件に合致するレコードを返します。

       また、 &&|| を使って、条件のAND・OR指定をすることもできます。

       実行例:

          select --table Site --filter "_id >= 4 && _id <= 6" --output_columns _id,_key
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         4,
          #         "http://example.net/afr"
          #       ],
          #       [
          #         5,
          #         "http://example.org/aba"
          #       ],
          #       [
          #         6,
          #         "http://example.com/rab"
          #       ]
          #     ]
          #   ]
          # ]
          select --table Site --filter "_id <= 2 || _id >= 7" --output_columns _id,_key
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "http://example.org/"
          #       ],
          #       [
          #         2,
          #         "http://example.net/"
          #       ],
          #       [
          #         7,
          #         "http://example.net/atv"
          #       ],
          #       [
          #         8,
          #         "http://example.org/gat"
          #       ],
          #       [
          #         9,
          #         "http://example.com/vdw"
          #       ]
          #     ]
          #   ]
          # ]

       query パラメータと filter パラメータを同時に指定すると、両者の条件をともに満たすレコードが
       結果として返ります。

   scorer を利用したソート
       select コマンドの scorer パラメータは、 全文検索を行った結果の各レコードに対して処理を行う
       ためのパラメータです。

       filter パラメータと同様に、 JavaScriptの式に似た文法で様々な条件を指定することができます。

       実行例:

          select --table Site --filter "true" --scorer "_score = rand()" --output_columns _id,_key,_score --sortby _score
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         9
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         6,
          #         "http://example.com/rab",
          #         424238335
          #       ],
          #       [
          #         9,
          #         "http://example.com/vdw",
          #         596516649
          #       ],
          #       [
          #         7,
          #         "http://example.net/atv",
          #         719885386
          #       ],
          #       [
          #         2,
          #         "http://example.net/",
          #         846930886
          #       ],
          #       [
          #         8,
          #         "http://example.org/gat",
          #         1649760492
          #       ],
          #       [
          #         3,
          #         "http://example.com/",
          #         1681692777
          #       ],
          #       [
          #         4,
          #         "http://example.net/afr",
          #         1714636915
          #       ],
          #       [
          #         1,
          #         "http://example.org/",
          #         1804289383
          #       ],
          #       [
          #         5,
          #         "http://example.org/aba",
          #         1957747793
          #       ]
          #     ]
          #   ]
          # ]
          select --table Site --filter "true" --scorer "_score = rand()" --output_columns _id,_key,_score --sortby _score
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         9
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         4,
          #         "http://example.net/afr",
          #         783368690
          #       ],
          #       [
          #         2,
          #         "http://example.net/",
          #         1025202362
          #       ],
          #       [
          #         5,
          #         "http://example.org/aba",
          #         1102520059
          #       ],
          #       [
          #         1,
          #         "http://example.org/",
          #         1189641421
          #       ],
          #       [
          #         3,
          #         "http://example.com/",
          #         1350490027
          #       ],
          #       [
          #         8,
          #         "http://example.org/gat",
          #         1365180540
          #       ],
          #       [
          #         9,
          #         "http://example.com/vdw",
          #         1540383426
          #       ],
          #       [
          #         7,
          #         "http://example.net/atv",
          #         1967513926
          #       ],
          #       [
          #         6,
          #         "http://example.com/rab",
          #         2044897763
          #       ]
          #     ]
          #   ]
          # ]

       '_score'は仮想的なカラムです。全文検索のスコアが代入されています。仮想的なカラムの詳細につ
       いては、 /reference/columns/pseudo を参照してください。

       上記のクエリでは scorer パラメータの条件はこのとおりです:

          _score = rand()

       このケースでは、rand()という乱数を返す関数を用いて、全文検索のスコアを乱数で上書きしていま
       す。

       sortby パラメータの条件は次のとおりです:

          _score

       これは、スコア順に検索結果を昇順にソートすることを意味しています。

       よって、上記のクエリは実行されるたびに検索結果の並び順がランダムに変わります。

   位置情報を用いた絞込・ソート
       Groongaでは、位置情報(経緯度)を保存することができます。また、保存した経緯度を用いて絞込
       やソートができます。

       Groongaでは位置情報を保存するためのカラムの型として、TokyoGeoPoint/WGS84GeoPointの2つの型
       があります。前者は日本測地系、後者は世界測地系(WGS84相当)の経緯度を保存します。

       以下のようにして経緯度を指定します:

       · "経度のミリ秒表記x緯度のミリ秒表記" (例: "128452975x503157902")

       · "経度のミリ秒表記,緯度のミリ秒表記" (例: "128452975,503157902")

       · "経度の度数表記x緯度の度数表記" (例: "35.6813819x139.7660839")

       · "経度の度数表記,緯度の度数表記" (例: "35.6813819,139.7660839")

       ここでは、ためしに東京駅と新宿駅とついて、世界測地系での位置情報を保存してみましょう。東京
       駅は緯度が35度40分52.975秒、経度が139度45分57.902秒です。新宿駅は緯度
       が35度41分27.316秒、経度が139度42分0.929秒です。よって、ミリ秒表記の場合はそれぞ
       れ"128452975x503157902"/"128487316x502920929"となります。度数表記の場合はそれぞ
       れ"35.6813819x139.7660839"/"35.6909211x139.7002581"となります。

       ミリ秒表記で位置情報を登録してみましょう。

       実行例:

          column_create --table Site --name location --type WGS84GeoPoint
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Site
          [
           {"_key":"http://example.org/","location":"128452975x503157902"}
           {"_key":"http://example.net/","location":"128487316x502920929"},
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 2]
          select --table Site --query "_id:1 OR _id:2" --output_columns _key,location
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "location",
          #           "WGS84GeoPoint"
          #         ]
          #       ],
          #       [
          #         "http://example.org/",
          #         "128452975x503157902"
          #       ],
          #       [
          #         "http://example.net/",
          #         "128487316x502920929"
          #       ]
          #     ]
          #   ]
          # ]

       scorer パラメータに /reference/functions/geo_distance を使って計算した距離を設定します。

       ここでは、秋葉原駅からの距離を表示させてみましょう。世界測地系では、秋葉原駅の位置は緯度
       が35度41分55.259秒、経度が139度46分27.188秒です。よって、geo_distance関数に与える文字列
       は"128515259x503187188"となります。

       実行例:

          select --table Site --query "_id:1 OR _id:2" --output_columns _key,location,_score --scorer '_score = geo_distance(location, "128515259x503187188")'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "location",
          #           "WGS84GeoPoint"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "http://example.org/",
          #         "128452975x503157902",
          #         2054
          #       ],
          #       [
          #         "http://example.net/",
          #         "128487316x502920929",
          #         6720
          #       ]
          #     ]
          #   ]
          # ]

       結果から、東京駅と秋葉原駅は2054m、秋葉原駅と新宿駅は6720m離れているようです。

       geo_distance 関数は、_score に値を設定することで、sortby  パラメータによるソートでも用いる
       ことができます。

       実行例:

          select --table Site --query "_id:1 OR _id:2" --output_columns _key,location,_score --scorer '_score = geo_distance(location, "128515259x503187188")' --sortby -_score
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "location",
          #           "WGS84GeoPoint"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "http://example.net/",
          #         "128487316x502920929",
          #         6720
          #       ],
          #       [
          #         "http://example.org/",
          #         "128452975x503157902",
          #         2054
          #       ]
          #     ]
          #   ]
          # ]

       Groongaでは、「ある地点から何m以内に存在する」といった絞込も可能です。

       その場合には、 filter パラメータで /reference/functions/geo_in_circle を指定します。

       たとえば、秋葉原駅から5000m以内にあるレコードを検索してみましょう。

       実行例:

          select --table Site --output_columns _key,location --filter 'geo_in_circle(location, "128515259x503187188", 5000)'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "location",
          #           "WGS84GeoPoint"
          #         ]
          #       ],
          #       [
          #         "http://example.org/",
          #         "128452975x503157902"
          #       ]
          #     ]
          #   ]
          # ]

       経緯度が指定の矩形領域内であるかどうかを判定する  /reference/functions/geo_in_rectangle も
       存在します。

   ドリルダウン
       これまでのセクションで検索方法と検索結果をどのようにソートするかを学びました。思うがままに
       検索できるようになりましたね。それでは、次のことをするにはどうすればよいでしょか。まず、あ
       るカラムに注目します。そして、そのカラムの値が同じレコードを集め、それぞれの値毎に集まった
       レコードの数を数えます。

       素朴な実現方法は、カラムのそれぞれの値で検索する方法です。結果として、すべてのカラムの値に
       ついてレコード数を求めることができます。シンプルな方法ですが、たくさんのレコードがある場合
       には現実的ではありません。

       SQLに慣れている人は、「GroongaにはSQLでいう  GROUP  BY  相当の機能はないの?」と思うでしょ
       う。

       もちろん、Groongaはそのような機能を提供しています。それが drilldown と呼んでいる機能です。

       drilldown はカラムの値ごとにレコード数を数える機能を提供します。値ごとに別々のクエリーにな
       るのではなく、1回のクエリーですべての値に対してレコード数を数えます。

       この機能を説明するために次のケースを考えます。ドメインで分類し、ドメインが属している国ごと
       にグループ化する、というケースです。

       この機能を使った具体的な例を示します。

       この例では、 Site テーブルに2つのカラムを追加しています。 domain  カラムはTLD(トップレベル
       ドメイン)に使います。  country  カラムは国名に使います。これらのカラムの型はドメイン名を主
       キーとする SiteDomain テーブルと国名を主キーとする SiteCountry テーブルです。

       実行例:

          table_create --name SiteDomain --flags TABLE_HASH_KEY --key_type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create --name SiteCountry --flags TABLE_HASH_KEY --key_type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table Site --name domain --flags COLUMN_SCALAR --type SiteDomain
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table Site --name country --flags COLUMN_SCALAR --type SiteCountry
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Site
          [
          {"_key":"http://example.org/","domain":".org","country":"japan"},
          {"_key":"http://example.net/","domain":".net","country":"brazil"},
          {"_key":"http://example.com/","domain":".com","country":"japan"},
          {"_key":"http://example.net/afr","domain":".net","country":"usa"},
          {"_key":"http://example.org/aba","domain":".org","country":"korea"},
          {"_key":"http://example.com/rab","domain":".com","country":"china"},
          {"_key":"http://example.net/atv","domain":".net","country":"china"},
          {"_key":"http://example.org/gat","domain":".org","country":"usa"},
          {"_key":"http://example.com/vdw","domain":".com","country":"japan"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 9]

       domain  カラムでドリルダウンする例を示します。  3つの値が  domain   カラムでは使われていま
       す。".org"、".net"そして".com"です。

       実行例:

          select --table Site --limit 0 --drilldown domain
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         9
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "country",
          #           "SiteCountry"
          #         ],
          #         [
          #           "domain",
          #           "SiteDomain"
          #         ],
          #         [
          #           "link",
          #           "Site"
          #         ],
          #         [
          #           "links",
          #           "Site"
          #         ],
          #         [
          #           "location",
          #           "WGS84GeoPoint"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         ".org",
          #         3
          #       ],
          #       [
          #         ".net",
          #         3
          #       ],
          #       [
          #         ".com",
          #         3
          #       ]
          #     ]
          #   ]
          # ]

       上記のクエリの集計結果です。

   domain カラムによるドリルダウン
        ┌─────────────────────────┬──────────────────────────┬─────────────────────────────────┐
        │グループ化するカラムの値 │ グループ化されたレコード │ グループ化されたレコード        │
        │                         │ 数                       │ は次のとおり                    │
        ├─────────────────────────┼──────────────────────────┼─────────────────────────────────┤
        │.org                     │ 3                        │                                 │
        │                         │                          │        · http://example.org/    │
        │                         │                          │                                 │
        │                         │                          │        · http://example.org/aba │
        │                         │                          │                                 │
        │                         │                          │        · http://example.org/gat │
        ├─────────────────────────┼──────────────────────────┼─────────────────────────────────┤
        │.net                     │ 3                        │                                 │
        │                         │                          │        · http://example.net/    │
        │                         │                          │                                 │
        │                         │                          │        · http://example.net/afr │
        │                         │                          │                                 │
        │                         │                          │        · http://example.net/atv │
        └─────────────────────────┴──────────────────────────┴─────────────────────────────────┘

        │.com                     │ 3                        │                                 │
        │                         │                          │        · http://example.com/    │
        │                         │                          │                                 │
        │                         │                          │        · http://example.com/rab │
        │                         │                          │                                 │
        │                         │                          │        · http://example.com/vdw │
        └─────────────────────────┴──────────────────────────┴─────────────────────────────────┘

       ドリルダウン結果は   _nsubrecs    カラムの値として返ります。この場合は、Site    テーブルは
       ".org"、".net"、".com"ドメインでグループ化されています。  _nsubrecs はグループ化されたドメ
       インが3つのレコードをそれぞれもつことを意味します。

       テーブル型を持つカラムに対してドリルダウンを行った場合、参照先のテーブルに存在するカラム値
       を取得することもできます。ドリルダウンを行ったテーブルには、  _nsubrecs という仮想的なカラ
       ムが追加されます。このカラムには、グループ化されたレコード数が入ります。

       では、参照されているテーブルの詳細を調べてみましょう。 Site テーブルは SiteDomain テーブル
       を domain カラムの型として使っています。 --drilldown_output_columns を参照されているカラム
       の詳細を知るのに使えます。

       実行例:

          select --table Site --limit 0 --drilldown domain --drilldown_output_columns _id,_key,_nsubrecs
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         9
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "country",
          #           "SiteCountry"
          #         ],
          #         [
          #           "domain",
          #           "SiteDomain"
          #         ],
          #         [
          #           "link",
          #           "Site"
          #         ],
          #         [
          #           "links",
          #           "Site"
          #         ],
          #         [
          #           "location",
          #           "WGS84GeoPoint"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         1,
          #         ".org",
          #         3
          #       ],
          #       [
          #         2,
          #         ".net",
          #         3
          #       ],
          #       [
          #         3,
          #         ".com",
          #         3
          #       ]
          #     ]
          #   ]
          # ]

       これでグループ化されたドメインの詳細がわかります。 domain の値が".org"であるレコードに対し
       て country カラムを使ってドリルダウンしてみましょう。

       実行例:

          select --table Site --limit 0 --filter "domain._id == 1" --drilldown country
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "country",
          #           "SiteCountry"
          #         ],
          #         [
          #           "domain",
          #           "SiteDomain"
          #         ],
          #         [
          #           "link",
          #           "Site"
          #         ],
          #         [
          #           "links",
          #           "Site"
          #         ],
          #         [
          #           "location",
          #           "WGS84GeoPoint"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "japan",
          #         1
          #       ],
          #       [
          #         "korea",
          #         1
          #       ],
          #       [
          #         "usa",
          #         1
          #       ]
          #     ]
          #   ]
          # ]

   複数のカラムでドリルダウン
       ドリルダウンでは複数のカラムをサポートしています。  drilldown パラメータの引数にカンマ区切
       りの値を指定します。すると一度にまとめてドリルダウン結果を取得できます。

       実行例:

          select --table Site --limit 0 --drilldown domain,country
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         9
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "country",
          #           "SiteCountry"
          #         ],
          #         [
          #           "domain",
          #           "SiteDomain"
          #         ],
          #         [
          #           "link",
          #           "Site"
          #         ],
          #         [
          #           "links",
          #           "Site"
          #         ],
          #         [
          #           "location",
          #           "WGS84GeoPoint"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         ".org",
          #         3
          #       ],
          #       [
          #         ".net",
          #         3
          #       ],
          #       [
          #         ".com",
          #         3
          #       ]
          #     ],
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "japan",
          #         3
          #       ],
          #       [
          #         "brazil",
          #         1
          #       ],
          #       [
          #         "usa",
          #         2
          #       ],
          #       [
          #         "korea",
          #         1
          #       ],
          #       [
          #         "china",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

   ドリルダウン結果をソートする
       ドリルダウン結果をソートしたい場合には --drilldown_sortby  を使います。指定した  _nsubrecs
       カラムを昇順でソートします。

       実行例:

          select --table Site --limit 0 --drilldown country --drilldown_sortby _nsubrecs
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         9
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "country",
          #           "SiteCountry"
          #         ],
          #         [
          #           "domain",
          #           "SiteDomain"
          #         ],
          #         [
          #           "link",
          #           "Site"
          #         ],
          #         [
          #           "links",
          #           "Site"
          #         ],
          #         [
          #           "location",
          #           "WGS84GeoPoint"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "brazil",
          #         1
          #       ],
          #       [
          #         "korea",
          #         1
          #       ],
          #       [
          #         "usa",
          #         2
          #       ],
          #       [
          #         "china",
          #         2
          #       ],
          #       [
          #         "japan",
          #         3
          #       ]
          #     ]
          #   ]
          # ]

   ドリルダウン結果の制限
       ドリルダウン結果はデフォルト10件に制限されています。  drilldown_limitdrilldown_offset
       パラメータをドリルダウン結果をカスタマイズするのに使います。

       実行例:

          select --table Site --limit 0 --drilldown country --drilldown_sortby _nsubrecs --drilldown_limit 2 --drilldown_offset 2
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         9
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "country",
          #           "SiteCountry"
          #         ],
          #         [
          #           "domain",
          #           "SiteDomain"
          #         ],
          #         [
          #           "link",
          #           "Site"
          #         ],
          #         [
          #           "links",
          #           "Site"
          #         ],
          #         [
          #           "location",
          #           "WGS84GeoPoint"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "usa",
          #         2
          #       ],
          #       [
          #         "china",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

       文字列を格納しているカラムのドリルダウンは、他の型のカラムのドリルダウンよりも遅くなること
       に注意してください。文字列型のカラムでドリルダウンするときは、主キーの方が文字列のテーブル
       を作って、そのテーブルを参照するカラムにしてください。

   タグ検索・参照関係の逆引き
       Groongaはカラム値として他のテーブルへの参照の配列を持つことができます。実は、テーブルへの
       参照の配列データを用いることによって、いわゆるタグ検索を行うことが可能となります。

       タグ検索はGroongaの転置インデックスというデータ構造を用いて高速に行われます。

   タグ検索
       動画共有サイトの検索エンジンを作ることを想定します。1つの動画には、その動画の特徴を表
       す、複数の語句が付与されています。「ある語句が付与されている動画の一覧を取得する」検索を行
       いたいとします。

       実際に、動画情報のテーブルを作成し、検索をしてみましょう。

       動画の情報を保存する、Videoテーブルを作成します。Videoテーブルでは、動画のタイトル
       をtitleカラムに、動画のタグ情報をtagsカラムにTagテーブル型で複数格納しています。

       タグの情報を保存する、Tagテーブルを作成します。Tagテーブルでは、タグ文字列を主キーに格納
       し、Videoテーブルのtagsカラムに対するインデックスをindex_tagsカラムに格納しています。

       実行例:

          table_create --name Video --flags TABLE_HASH_KEY --key_type UInt32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create --name Tag --flags TABLE_HASH_KEY --key_type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table Video --name title --flags COLUMN_SCALAR --type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table Video --name tags --flags COLUMN_VECTOR --type Tag
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table Tag --name index_tags --flags COLUMN_INDEX --type Video --source tags
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Video
          [
          {"_key":1,"title":"Soccer 2010","tags":["Sports","Soccer"]},
          {"_key":2,"title":"Zenigata Kinjirou","tags":["Variety","Money"]},
          {"_key":3,"title":"groonga Demo","tags":["IT","Server","groonga"]},
          {"_key":4,"title":"Moero!! Ultra Baseball","tags":["Sports","Baseball"]},
          {"_key":5,"title":"Hex Gone!","tags":["Variety","Quiz"]},
          {"_key":6,"title":"Pikonyan 1","tags":["Animation","Pikonyan"]},
          {"_key":7,"title":"Draw 8 Month","tags":["Animation","Raccoon"]},
          {"_key":8,"title":"K.O.","tags":["Animation","Music"]}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 8]

       インデックスカラムを作成すると、全文検索が高速に行えるようになります。インデックスカラム
       は、対象のカラムに保存されたデータに更新があったとき、自動的に更新されます。

       「ある語句が付与されている動画の一覧を取得する」検索を行いましょう。

       実行例:

          select --table Video --query tags:@Variety --output_columns _key,title
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "UInt32"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "Zenigata Kinjirou"
          #       ],
          #       [
          #         5,
          #         "Hex Gone!"
          #       ]
          #     ]
          #   ]
          # ]
          select --table Video --query tags:@Sports --output_columns _key,title
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "UInt32"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "Soccer 2010"
          #       ],
          #       [
          #         4,
          #         "Moero!! Ultra Baseball"
          #       ]
          #     ]
          #   ]
          # ]
          select --table Video --query tags:@Animation --output_columns _key,title
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "UInt32"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         6,
          #         "Pikonyan 1"
          #       ],
          #       [
          #         7,
          #         "Draw 8 Month"
          #       ],
          #       [
          #         8,
          #         "K.O."
          #       ]
          #     ]
          #   ]
          # ]

       このように、「Variety」、「Sports」、「Animation」のようなタグで検索を行うことができまし
       た。

   参照関係の逆引き
       Groongaはテーブル間の参照関係の逆引きを高速に行うためのインデックスを付与することができま
       す。タグ検索は、その1例にすぎません。

       例えば、ソーシャルネットワーキングサイトにおける友人関係を逆引き検索することができます。

       以下の例では、ユーザー情報を格納するUserテーブルを作成し、ユーザー名を格納するusernameカラ
       ム、ユーザーの友人一覧を配列で格納するfriendsカラムとそのインデックスのindex_friendsカラム
       を追加しています。

       実行例:

          table_create --name User --flags TABLE_HASH_KEY --key_type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table User --name username --flags COLUMN_SCALAR --type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table User --name friends --flags COLUMN_VECTOR --type User
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table User --name index_friends --flags COLUMN_INDEX --type User --source friends
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table User
          [
          {"_key":"ken","username":"健作","friends":["taro","jiro","tomo","moritapo"]}
          {"_key":"moritapo","username":"森田","friends":["ken","tomo"]}
          {"_key":"taro","username":"ぐるんが太郎","friends":["jiro","tomo"]}
          {"_key":"jiro","username":"ぐるんが次郎","friends":["taro","tomo"]}
          {"_key":"tomo","username":"トモちゃん","friends":["ken","hana"]}
          {"_key":"hana","username":"花子","friends":["ken","taro","jiro","moritapo","tomo"]}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 6]

       指定したユーザーを友人リストに入れているユーザーの一覧を表示してみましょう。

       実行例:

          select --table User --query friends:@tomo --output_columns _key,username
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "username",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "ken",
          #         "健作"
          #       ],
          #       [
          #         "taro",
          #         "ぐるんが太郎"
          #       ],
          #       [
          #         "jiro",
          #         "ぐるんが次郎"
          #       ],
          #       [
          #         "moritapo",
          #         "森田"
          #       ],
          #       [
          #         "hana",
          #         "花子"
          #       ]
          #     ]
          #   ]
          # ]
          select --table User --query friends:@jiro --output_columns _key,username
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "username",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "ken",
          #         "健作"
          #       ],
          #       [
          #         "taro",
          #         "ぐるんが太郎"
          #       ],
          #       [
          #         "hana",
          #         "花子"
          #       ]
          #     ]
          #   ]
          # ]

       さらに、ドリルダウンを使って、友人リストに入っている数の一覧を表示してみましょう。

       実行例:

          select --table User --limit 0 --drilldown friends
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         6
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "friends",
          #           "User"
          #         ],
          #         [
          #           "index_friends",
          #           "UInt32"
          #         ],
          #         [
          #           "username",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         6
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "taro",
          #         3
          #       ],
          #       [
          #         "jiro",
          #         3
          #       ],
          #       [
          #         "tomo",
          #         5
          #       ],
          #       [
          #         "moritapo",
          #         2
          #       ],
          #       [
          #         "ken",
          #         3
          #       ],
          #       [
          #         "hana",
          #         1
          #       ]
          #     ]
          #   ]
          # ]

       このように、テーブルの参照関係を逆にたどる検索ができました。

   インデックス付きジオサーチ
       Groongaでは位置情報のカラムに対して、インデックスを付与することが出来ます。大量の位置情報
       レコードを検索する場合に、検索速度が速くなります。

       実行例:

          table_create --name GeoSite --flags TABLE_HASH_KEY --key_type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table GeoSite --name location --type WGS84GeoPoint
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create --name GeoIndex --flags TABLE_PAT_KEY --key_type WGS84GeoPoint
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table GeoIndex --name index_point --type GeoSite --flags COLUMN_INDEX --source location
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table GeoSite
          [
           {"_key":"http://example.org/","location":"128452975x503157902"},
           {"_key":"http://example.net/","location":"128487316x502920929"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 2]
          select --table GeoSite --filter 'geo_in_circle(location, "128515259x503187188", 5000)' --output_columns _key,location
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "location",
          #           "WGS84GeoPoint"
          #         ]
          #       ],
          #       [
          #         "http://example.org/",
          #         "128452975x503157902"
          #       ]
          #     ]
          #   ]
          # ]

       これらのインデックスは、位置情報レコードを用いてソートする場合に使われます。

       実行例:

          select --table GeoSite --filter 'geo_in_circle(location, "128515259x503187188", 50000)' --output_columns _key,location,_score --sortby '-geo_distance(location, "128515259x503187188")' --scorer '_score = geo_distance(location, "128515259x503187188")'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "location",
          #           "WGS84GeoPoint"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "http://example.org/",
          #         "128452975x503157902",
          #         2054
          #       ],
          #       [
          #         "http://example.net/",
          #         "128487316x502920929",
          #         6720
          #       ]
          #     ]
          #   ]
          # ]

   match_columnsパラメータ
   複数のカラムに対する全文検索
       Groongaでは、複数のカラムを対象とした全文検索を行うことができます。例えば、ブログのテーブ
       ルで、タイトルと内容とがそれぞれ別のカラムに入ったものがあるとしましょう。「タイトルもしく
       は内容に特定の単語を含む」検索を行いたいとします。

       この場合、2つのインデックス作成方式があります。1つは、それぞれのカラムに1つずつインデック
       スを付与する方式です。もう1つは、複数のカラムに対して1つのインデックスを付与する方式で
       す。Groongaでは、どちらの形式のインデックスが存在している場合でも、同一の記法で全文検索を
       行うことができます。

   カラムごとにインデックスを付与する場合
       カラムごとにインデックスを作成する方法はこの通りです。

       まず、 Blog1 テーブルを作成し、 title カラムと message カラムを追加します。 title カラムに
       ブログのタイトルを保存し、 message カラムにブログの本文を保存します。

       インデックス用の IndexBlog1 テーブルも作り、 title カラムのインデックス用に index_title カ
       ラム、 message カラムのインデックス用に index_message カラムと、それぞれ1カラムごとに1つず
       つ追加しています。

       実行例:

          table_create --name Blog1 --flags TABLE_HASH_KEY --key_type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table Blog1 --name title --flags COLUMN_SCALAR --type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table Blog1 --name message --flags COLUMN_SCALAR --type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create --name IndexBlog1 --flags TABLE_PAT_KEY --key_type ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table IndexBlog1 --name index_title --flags COLUMN_INDEX|WITH_POSITION --type Blog1 --source title
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table IndexBlog1 --name index_message --flags COLUMN_INDEX|WITH_POSITION --type Blog1 --source message
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Blog1
          [
          {"_key":"grn1","title":"Groonga test","message":"Groonga message"},
          {"_key":"grn2","title":"baseball result","message":"rakutan eggs 4 - 4 Groonga moritars"},
          {"_key":"grn3","title":"Groonga message","message":"none"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]

       match_columns オプションで、検索対象のカラムを複数指定することが出来ます。検索する文字列は
       query   オプションで指定します。これを使うことで、タイトルと本文を全文検索することができま
       す。

       実際にブログエントリを検索してみましょう。

       実行例:

          select --table Blog1 --match_columns title||message --query groonga
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "message",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "grn1",
          #         "Groonga message",
          #         "Groonga test"
          #       ],
          #       [
          #         3,
          #         "grn3",
          #         "none",
          #         "Groonga message"
          #       ],
          #       [
          #         2,
          #         "grn2",
          #         "rakutan eggs 4 - 4 Groonga moritars",
          #         "baseball result"
          #       ]
          #     ]
          #   ]
          # ]
          select --table Blog1 --match_columns title||message --query message
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "message",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         3,
          #         "grn3",
          #         "none",
          #         "Groonga message"
          #       ],
          #       [
          #         1,
          #         "grn1",
          #         "Groonga message",
          #         "Groonga test"
          #       ]
          #     ]
          #   ]
          # ]
          select --table Blog1 --match_columns title --query message
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "message",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         3,
          #         "grn3",
          #         "none",
          #         "Groonga message"
          #       ]
          #     ]
          #   ]
          # ]

   複数のカラムにまたがったインデックスを付与する場合
       Groongaでは複数のカラムにまたがったインデックスもサポートしています。

       インデックスカラムが1つしかないというのが違いです。 titlemessage の2つのカラムに対する
       インデックスが共通になっています。

       共通のインデックスを用いても、  title  カラムのみでの検索、  message  カラムのみでの検索、
       title もしくは message カラムでの検索、全ての検索を行うことができます。

       実行例:

          table_create --name Blog2 --flags TABLE_HASH_KEY --key_type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table Blog2 --name title --flags COLUMN_SCALAR --type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table Blog2 --name message --flags COLUMN_SCALAR --type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create --name IndexBlog2 --flags TABLE_PAT_KEY --key_type ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table IndexBlog2 --name index_blog --flags COLUMN_INDEX|WITH_POSITION|WITH_SECTION --type Blog2 --source title,message
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Blog2
          [
          {"_key":"grn1","title":"Groonga test","message":"Groonga message"},
          {"_key":"grn2","title":"baseball result","message":"rakutan eggs 4 - 4 Groonga moritars"},
          {"_key":"grn3","title":"Groonga message","message":"none"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]

       実際に前と同じ例で検索してみましょう。結果は上の例と同じになります。

       実行例:

          select --table Blog2 --match_columns title||message --query groonga
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "message",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "grn1",
          #         "Groonga message",
          #         "Groonga test"
          #       ],
          #       [
          #         2,
          #         "grn2",
          #         "rakutan eggs 4 - 4 Groonga moritars",
          #         "baseball result"
          #       ],
          #       [
          #         3,
          #         "grn3",
          #         "none",
          #         "Groonga message"
          #       ]
          #     ]
          #   ]
          # ]
          select --table Blog2 --match_columns title||message --query message
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "message",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "grn1",
          #         "Groonga message",
          #         "Groonga test"
          #       ],
          #       [
          #         3,
          #         "grn3",
          #         "none",
          #         "Groonga message"
          #       ]
          #     ]
          #   ]
          # ]
          select --table Blog2 --match_columns title --query message
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "message",
          #           "ShortText"
          #         ],
          #         [
          #           "title",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         3,
          #         "grn3",
          #         "none",
          #         "Groonga message"
          #       ]
          #     ]
          #   ]
          # ]

       注釈:
          "インデックスはどちらがよい方法なのか"と疑問に思うかもしれません。それは場合によりま
          す。

          · カラムごとのインデックス  -  マルチカラムインデックスよりも更新性能が良い傾向がありま
            す。一方、ディスク使用効率はあまり良くありません。

          · マルチカラムインデックス - バッファを共有するためディスク使用効率が良いです。一方、更
            新性能があまり良くありません。

   インデックス名を指定した全文検索
       執筆中です。

   カラムインデックスによる関連テーブルをまたぐ検索
       複数のテーブルがカラムインデックスで関連付けられているなら、参照カラム名を指定して複数の
       テーブルにまたがって検索することができます。

       具体的な例を示します。

       ブログ記事や記事のコメントを保存するテーブルがあります。記事を保存するテーブルには記事とコ
       メントのためのカラムがあります。そしてそのコメントカラムはCommentsテーブルを参照していま
       す。コメントを保存するテーブルにはコメントと記事テーブルに対するカラムインデックスが設定さ
       れています。

       特定のキーワードをコメントに含む記事を探すには、コメントテーブルを全文検索する必要があ
       り、全文検索結果を含むレコードをさらに検索する必要があります。

       しかし、カラムインデックスを指定することで一度にレコードを検索することができます。

       サンプルのスキーマ定義はこちらです。

       実行例:

          table_create Comments TABLE_HASH_KEY UInt32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Comments content COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Articles TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Articles content COLUMN_SCALAR Text
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Articles comment COLUMN_SCALAR Comments
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Lexicon TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Lexicon articles_content COLUMN_INDEX|WITH_POSITION Articles content
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Lexicon comments_content COLUMN_INDEX|WITH_POSITION Comments content
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Comments article COLUMN_INDEX Articles comment
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       サンプルデータはこちらです。

       実行例:

          load --table Comments
          [
          {"_key": 1, "content": "I'm using Groonga too!"},
          {"_key": 2, "content": "I'm using Groonga and Mroonga!"},
          {"_key": 3, "content": "I'm using Mroonga too!"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]
          load --table Articles
          [
          {"content": "Groonga is fast!", "comment": 1},
          {"content": "Groonga is useful!"},
          {"content": "Mroonga is fast!", "comment": 3}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]

       特定のキーワードをコメントに含むレコードを検索するクエリを書くことができ、それによりレコー
       ドを参照する記事を取得します。

       これまでに記述したレコードを検索するクエリ:

          select Articles --match_columns comment.content --query groonga --output_columns "_id, _score, *"

       ArticlesテーブルのcommentカラムとCommentsテーブルのcontentカラムをピリオド(  .   )で連結し
       --match_columns の引数とする必要があります。

       最初に、このクエリはCommentsテーブルのcontentを全文検索し、次にCommentsテーブルを検索した
       結果のレコードを参照するArticlesテーブルのレコードを取得します。(これにより、Commentsテー
       ブルの  article インデックスカラムを生成するクエリをコメントアウトすると、意図した検索結果
       が得られません。)

       実行例:

          select Articles --match_columns comment.content --query groonga --output_columns "_id, _score, *"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ],
          #         [
          #           "comment",
          #           "Comments"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ]
          #       ],
          #       [
          #         1,
          #         1,
          #         1,
          #         "Groonga is fast!"
          #       ]
          #     ]
          #   ]
          # ]

       これで、特定のキーワードをコメントとして含む記事を検索できます。

       このネストしたインデックスの検索という特徴には関連するテーブルが2つだけに制限されません。

       前のものと似たサンプルのスキーマ定義です。違いは'返信'を表現するテーブルの追加と関連する
       テーブルが3つに増えたことです。

       実行例:

          table_create Replies2 TABLE_HASH_KEY UInt32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Replies2 content COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Comments2 TABLE_HASH_KEY UInt32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Comments2 content COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Comments2 comment COLUMN_SCALAR Replies2
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Articles2 TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Articles2 content COLUMN_SCALAR Text
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Articles2 comment COLUMN_SCALAR Comments2
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Lexicon2 TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Lexicon2 articles_content COLUMN_INDEX|WITH_POSITION Articles2 content
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Lexicon2 comments_content COLUMN_INDEX|WITH_POSITION Comments2 content
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Lexicon2 replies_content COLUMN_INDEX|WITH_POSITION Replies2 content
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Comments2 article COLUMN_INDEX Articles2 comment
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Replies2 reply_to COLUMN_INDEX Comments2 comment
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       サンプルデータはこちらです。

       実行例:

          load --table Replies2
          [
          {"_key": 1, "content": "I'm using Rroonga too!"},
          {"_key": 2, "content": "I'm using Groonga and Mroonga and Rroonga!"},
          {"_key": 3, "content": "I'm using Nroonga too!"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]
          load --table Comments2
          [
          {"_key": 1, "content": "I'm using Groonga too!", "comment": 1},
          {"_key": 2, "content": "I'm using Groonga and Mroonga!", "comment": 2},
          {"_key": 3, "content": "I'm using Mroonga too!"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]
          load --table Articles2
          [
          {"content": "Groonga is fast!", "comment": 1},
          {"content": "Groonga is useful!", "comment": 2},
          {"content": "Mroonga is fast!", "comment": 3}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]

       これまでに記述したレコードを検索するクエリ:

          select Articles2 --match_columns comment.content --query mroonga --output_columns "_id, _score, *"
          select Articles2 --match_columns comment.comment.content --query mroonga --output_columns "_id, _score, *"

       最初のクエリは  Comments2  テーブルから  mroonga を検索します。2つめのクエリは Replies2Comments2 テーブルからカラムインデックスによる参照を用いて``mroonga``を検索します。

       実行例:

          select Articles2 --match_columns comment.content --query mroonga --output_columns "_id, _score, *"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ],
          #         [
          #           "comment",
          #           "Comments2"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ]
          #       ],
          #       [
          #         2,
          #         1,
          #         2,
          #         "Groonga is useful!"
          #       ],
          #       [
          #         3,
          #         1,
          #         3,
          #         "Mroonga is fast!"
          #       ]
          #     ]
          #   ]
          # ]
          select Articles2 --match_columns comment.comment.content --query mroonga --output_columns "_id, _score, *"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ],
          #         [
          #           "comment",
          #           "Comments2"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ]
          #       ],
          #       [
          #         2,
          #         1,
          #         2,
          #         "Groonga is useful!"
          #       ]
          #     ]
          #   ]
          # ]

       結果として、最初のクエリは  Comments2  テーブルに  mroonga  をキーワードとして含むレコード
       が2つあるので、該当する記事2つにマッチします。

       一方、2つめのクエリは  Replies2  テーブルに  mroonga  というキーワードにマッチするレコード
       が1つしかなく、 Comments2  テーブルでそのキーワードを含むレコードを参照するコメントが1つな
       ので、該当する記事は1つだけとなります。

   インデックスの重み
       執筆中です。

   パトリシア木による前方一致検索
       Groongaのテーブルは、テーブル作成時にパトリシア木オプションを指定すると、前方一致検索を行
       うことができます。

       また、追加のオプションを指定することにより、主キーの後方一致検索をも行うことができます。

   主キーによる前方一致検索
       table_createコマンドのflagsオプションにTABLE_PAT_KEYを指定することで、主キーによる前方一致
       検索ができるようになります。

       実行例:

          table_create --name PatPrefix --flags TABLE_PAT_KEY --key_type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table PatPrefix
          [
          {"_key":"James"}
          {"_key":"Jason"}
          {"_key":"Jennifer"},
          {"_key":"Jeff"},
          {"_key":"John"},
          {"_key":"Joseph"},
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 6]
          select --table PatPrefix --query _key:^Je
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         3,
          #         "Jennifer"
          #       ],
          #       [
          #         4,
          #         "Jeff"
          #       ]
          #     ]
          #   ]
          # ]

   主キーによる後方一致検索
       table_createコマンドのflagsオプションにTABLE_PAT_KEYとKEY_WITH_SISを指定することで、主キー
       による前方一致検索・後方一致検索の両方が可能となります。

       KEY_WITH_SISフラグを付与すると、データを追加する際に後方一致用のレコードも追加されてしまい
       ます。そのため、単純に検索すると、元のレコードに加えて自動的に追加されたレコードまでヒット
       してしまいます。元のレコードのみ検索するために、一工夫必要になります。

       例えば、元のレコードと自動的に追加されたレコードとの区別をつけるために、元のレコードである
       ことを示すoriginalカラムを追加して、検索時にはoriginalカラムが true も検索条件に加えます。
       --query オプションでは Bool 型の値を直感的に指定することができないので --filter オプション
       を使っていることに注意してください。

       実行例:

          table_create --name PatSuffix --flags TABLE_PAT_KEY|KEY_WITH_SIS --key_type ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create --table PatSuffix --name original --type Bool
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table PatSuffix
          [
          {"_key":"ひろゆき","original":true},
          {"_key":"まろゆき","original":true},
          {"_key":"ひろあき","original":true},
          {"_key":"ゆきひろ","original":true}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 4]
          select --table PatSuffix --query _key:$ゆき
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         4
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "original",
          #           "Bool"
          #         ]
          #       ],
          #       [
          #         3,
          #         "ゆき",
          #         false
          #       ],
          #       [
          #         2,
          #         "ろゆき",
          #         false
          #       ],
          #       [
          #         5,
          #         "まろゆき",
          #         true
          #       ],
          #       [
          #         1,
          #         "ひろゆき",
          #         true
          #       ]
          #     ]
          #   ]
          # ]
          select --table PatSuffix --filter '_key @$ "ゆき" && original == true'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "original",
          #           "Bool"
          #         ]
          #       ],
          #       [
          #         5,
          #         "まろゆき",
          #         true
          #       ],
          #       [
          #         1,
          #         "ひろゆき",
          #         true
          #       ]
          #     ]
          #   ]
          # ]

   全文検索用の語彙表の作成
       Groongaでは、全文検索に用いるための語彙表がテーブルとして扱えます。よって、語彙ごとに複数
       の情報を保持することができます。例えば、語彙の出現数や検索ストップワードのフラグ、単語の重
       要度などを保持することができます。

       TODO: この項目については、現在執筆中です。

   マイクロブログ検索システムの作成
       これまで学んだGroongaの機能を用いて、マイクロブログの検索システムを作成してみましょう。マ
       イクロブログとは、Twitterのような短いメッセージを投稿するブログです。

   テーブルの作成
       まずは、テーブルを作成します。

          table_create --name Users --flags TABLE_HASH_KEY --key_type ShortText
          table_create --name Comments --flags TABLE_HASH_KEY --key_type ShortText
          table_create --name HashTags --flags TABLE_HASH_KEY --key_type ShortText
          table_create --name Bigram --flags TABLE_PAT_KEY --key_type ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
          table_create --name GeoIndex --flags TABLE_PAT_KEY --key_type WGS84GeoPoint

          column_create --table Users --name name --flags COLUMN_SCALAR --type ShortText
          column_create --table Users --name follower --flags COLUMN_VECTOR --type Users
          column_create --table Users --name favorites --flags COLUMN_VECTOR --type Comments
          column_create --table Users --name location --flags COLUMN_SCALAR --type WGS84GeoPoint
          column_create --table Users --name location_str --flags COLUMN_SCALAR --type ShortText
          column_create --table Users --name description --flags COLUMN_SCALAR --type ShortText
          column_create --table Users --name followee --flags COLUMN_INDEX --type Users --source follower

          column_create --table Comments --name comment --flags COLUMN_SCALAR --type ShortText
          column_create --table Comments --name last_modified --flags COLUMN_SCALAR --type Time
          column_create --table Comments --name replied_to --flags COLUMN_SCALAR --type Comments
          column_create --table Comments --name replied_users --flags COLUMN_VECTOR --type Users
          column_create --table Comments --name hash_tags --flags COLUMN_VECTOR --type HashTags
          column_create --table Comments --name location --flags COLUMN_SCALAR --type WGS84GeoPoint
          column_create --table Comments --name posted_by --flags COLUMN_SCALAR --type Users
          column_create --table Comments --name favorited_by --flags COLUMN_INDEX --type Users --source favorites

          column_create --table HashTags --name hash_index --flags COLUMN_INDEX --type Comments --source hash_tags

          column_create --table Bigram --name users_index --flags COLUMN_INDEX|WITH_POSITION|WITH_SECTION --type Users --source name,location_str,description
          column_create --table Bigram --name comment_index --flags COLUMN_INDEX|WITH_POSITION --type Comments --source comment

          column_create --table GeoIndex --name users_location --type Users --flags COLUMN_INDEX --source location
          column_create --table GeoIndex --name comments_location --type Comments --flags COLUMN_INDEX --source location

   Usersテーブル
       ユーザーの名前や自己紹介文、フォローしているユーザー一覧など、ユーザー情報を格納するための
       テーブルです。

       _key   ユーザーID

       name   ユーザー名

       follower
              フォローしているユーザーの一覧

       favorites
              お気に入りのコメント一覧

       location
              ユーザーの現在地(緯度経度座標)

       location_str
              ユーザーの現在地(文字列)

       description
              ユーザーの自己紹介

       followee
              Users  テーブルの  follower カラムに対するインデックス。 このインデックスを作ること
              で、あるユーザーをフォローしているユーザーを検索できるようになります。

   Commentsテーブル
       コメント内容や投稿日時、返信先情報など、コメントに関する内容を格納するテーブルです。

       _key   コメントID

       comment
              コメント内容

       last_modified
              投稿日時

       replied_to
              返信元のコメント内容

       replied_users
              返信先のユーザーの一覧

       hash_tags
              コメントのハッシュタグの一覧

       location
              投稿場所(緯度経度座標のため)

       posted_by
              コメントを書いたユーザー

       favorited_by
              Users テーブルの favorites カラムに対するインデックス。  このインデックスを作ること
              で、指定したコメントを誰がお気に入りに入れているのかを検索できるようになります。

   HashTagsテーブル
       コメントのハッシュタグを一覧で保存するためのテーブルです。

       _key   ハッシュタグ

       hash_index
              「Comments.hash_tags」のインデックス。   このインデックスを作ることで、指定したハッ
              シュタグのついているコメントの一覧を出すことが出来るようになります。

   Bigramテーブル
       ユーザー情報・コメントで全文検索が出来るようにするためのインデックスを格納するテーブルで
       す。

       _key   単語

       users_index
              ユーザー情報のインデックス。         このカラムは、ユーザー名「Users.name」、現在地
              「Users.location_str」、自己紹介文「Users.description」のインデックスになっていま
              す。

       comment_index
              コメント内容「Comments.comment」のインデックス

   GeoIndexテーブル
       位置情報検索を効果的に行うための locationカラムのインデックスを保持するテーブルです。

       users_location
              Usersテーブルのlocationカラムに対するインデックス

       comments_location
              Commentsテーブルのlocationカラムに対するインデックス

   データのロード
       つづいて、テスト用データをロードします。

          load --table Users
          [
            {
              "_key": "alice",
              "name": "Alice",
              "follower": ["bob"],
              "favorites": [],
              "location": "152489000x-255829000",
              "location_str": "Boston, Massachusetts",
              "description": "Groonga developer"
            },
            {
              "_key": "bob",
              "name": "Bob",
              "follower": ["alice","charlie"],
              "favorites": ["alice:1","charlie:1"],
              "location": "146249000x-266228000",
              "location_str": "Brooklyn, New York City",
              "description": ""
            },
            {
              "_key": "charlie",
              "name": "Charlie",
              "follower": ["alice","bob"],
              "favorites": ["alice:1","bob:1"],
              "location": "146607190x-267021260",
              "location_str": "Newark, New Jersey",
              "description": "Hmm,Hmm"
            }
          ]

          load --table Comments
          [
            {
              "_key": "alice:1",
              "comment": "I've created micro-blog!",
              "last_modified": "2010/03/17 12:05:00",
              "posted_by": "alice",
            },
            {
              "_key": "bob:1",
              "comment": "First post. test,test...",
              "last_modified": "2010/03/17 12:00:00",
              "posted_by": "bob",
            },
            {
              "_key": "alice:2",
              "comment": "@bob Welcome!!!",
              "last_modified": "2010/03/17 12:05:00",
              "replied_to": "bob:1",
              "replied_users": ["bob"],
              "posted_by": "alice",
            },
            {
              "_key": "bob:2",
              "comment": "@alice Thanks!",
              "last_modified": "2010/03/17 13:00:00",
              "replied_to": "alice:2",
              "replied_users": ["alice"],
              "posted_by": "bob",
            },
            {
              "_key": "bob:3",
              "comment": "I've just used 'Try-Groonga' now! #groonga",
              "last_modified": "2010/03/17 14:00:00",
              "hash_tags": ["groonga"],
              "location": "146566000x-266422000",
              "posted_by": "bob",
            },
            {
              "_key": "bob:4",
              "comment": "I'm come at city of New York for development camp! #groonga #travel",
              "last_modified": "2010/03/17 14:05:00",
              "hash_tags": ["groonga", "travel"],
              "location": "146566000x-266422000",
              "posted_by": "bob",
            },
            {
              "_key": "charlie:1",
              "comment": "@alice @bob I've tried to register!",
              "last_modified": "2010/03/17 15:00:00",
              "replied_users": ["alice", "bob"],
              "location": "146607190x-267021260",
              "posted_by": "charlie",
            }
            {
              "_key": "charlie:2",
              "comment": "I'm at the Museum of Modern Art in NY now!",
              "last_modified": "2010/03/17 15:05:00",
              "location": "146741340x-266319590",
              "posted_by": "charlie",
            }
          ]

       Users   テーブルの   follower   カラムと   favorites  カラム、そして  Comments  テーブルの
       replied_users   カラムは、ベクターカラムです。そのため、これらのカラムは配列で値を指定しま
       す。

       Users  テーブルの location カラムと、Comments テーブルの location カラムは、 GeoPoint 型で
       す。この型での値の指定は、"[緯度]x[経度]"と記述して指定します。

       Comments テーブルの last_modified カラムは、Time型です。

       この型での値を指定する方法は2つあります。1つ目の方法は、1970年1月1日0時0分0秒からの経過秒
       数の値を直接指定する方法です。このとき、小数部分を指定することでマイクロ秒数での指定が可能
       です。指定した値は、データのロードの際にマイクロ秒を単位とする整数値に変換後、格納されま
       す。  2つ目の方法は、文字列で日時と時刻を指定する方法です。"年/月/日 時:分:秒"というフォー
       マットで記述することで、データロードの際に文字列からキャストされ、マイクロ秒数の値が格納さ
       れます。

   検索
       マイクロブログを検索してみましょう。

   キーワードでユーザー検索
       ここでは、 match_columns で扱った、複数カラムを対象とした検索を行います。

       指定された文字列で、ユーザー名・現在地・自己紹介文を対象に検索をします。

       実行例:

          select --table Users --match_columns name,location_str,description --query "New York" --output_columns _key,name
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]
          # [[0, 1337566253.89858, 0.000355720520019531], 8]
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "name",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "bob",
          #         "Bob"
          #       ]
          #     ]
          #   ]
          # ]

       「New  York」をキーワードにユーザー検索した結果、New Yorkに住んでいる「Bob」がヒットしまし
       た。

   位置情報(GeoPoint)でユーザー検索
       ここでは、GeoPoint型のカラムで検索をします。GeoPoint型については  search  を参照してくださ
       い。

       次の例では、特定の場所から20km以内に住んでいる人を検索します。

       実行例:

          select --table Users --filter 'geo_in_circle(location,"146710080x-266315480",20000)' --output_columns _key,name
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "name",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "charlie",
          #         "Charlie"
          #       ],
          #       [
          #         "bob",
          #         "Bob"
          #       ]
          #     ]
          #   ]
          # ]

       「Bob」と「Charlie」が「Grand Central Terminal」から20km以内に住んでいることがわかります。

   あるユーザーをフォローしてるユーザーの検索
       ここでは、 index の参照関係の逆引きをします。

       次の例は、 Users テーブルの follower カラムにあるフォローリストを逆引きします。

       実行例:

          select --table Users --query follower:@bob --output_columns _key,name
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "name",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "alice",
          #         "Alice"
          #       ],
          #       [
          #         "charlie",
          #         "Charlie"
          #       ]
          #     ]
          #   ]
          # ]

       「Alice」と「Charlie」が「Bob」をフォローしていることがわかります。

   GeoPointでコメント検索
       ある範囲内で書かれたコメントを検索します。

       また、   drilldown  をおこないます。検索結果をハッシュタグとユーザーでドリルダウンし、ユー
       ザー別・ハッシュタグ別のカウントを出します。

       実行例:

          select --table Comments --filter 'geo_in_circle(location,"146867000x-266280000",20000)' --output_columns posted_by.name,comment --drilldown hash_tags,posted_by
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         4
          #       ],
          #       [
          #         [
          #           "posted_by.name",
          #           "ShortText"
          #         ],
          #         [
          #           "comment",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "Charlie",
          #         "I'm at the Museum of Modern Art in NY now!"
          #       ],
          #       [
          #         "Bob",
          #         "I've just used 'Try-Groonga' now! #groonga"
          #       ],
          #       [
          #         "Bob",
          #         "I'm come at city of New York for development camp! #groonga #travel"
          #       ],
          #       [
          #         "Charlie",
          #         "@alice @bob I've tried to register!"
          #       ]
          #     ],
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "groonga",
          #         2
          #       ],
          #       [
          #         "travel",
          #         1
          #       ]
          #     ],
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "charlie",
          #         2
          #       ],
          #       [
          #         "bob",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

       このクエリは、ニューヨークのセントラルパークから20km圏内で投稿されたコメントを検索します。

       指定した範囲が20kmなので、位置情報を含むすべてのコメントが検索されました。#groongaという
       ハッシュタグが2件、#travelというハッシュタグが1件で、BobとCharlieがコメントしているのは2件
       あります。

   キーワードでコメント検索
       あるキーワードを含むコメントを検索します。そして、 search で言及している _score を出してみ
       ます。

       実行例:

          select --table Comments --query comment:@Now --output_columns comment,_score
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "comment",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "I've just used 'Try-Groonga' now! #groonga",
          #         1
          #       ],
          #       [
          #         "I'm at the Museum of Modern Art in NY now!",
          #         1
          #       ]
          #     ]
          #   ]
          # ]

       'Now'をキーワードに使っているので、このクエリは2件のコメントを返します。 _score の値として
       'Now'のカウントを含んでいます。

   キーワードと位置情報で検索
       あるキーワードと位置情報の両方でコメントを検索します。 --query--filter  オプションの両
       方を使用した場合、両方の条件に一致するレコードを返します。

       実行例:

          select --table Comments --query comment:@New --filter 'geo_in_circle(location,"146867000x-266280000",20000)' --output_columns posted_by.name,comment --drilldown hash_tags,posted_by
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "posted_by.name",
          #           "ShortText"
          #         ],
          #         [
          #           "comment",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "Bob",
          #         "I'm come at city of New York for development camp! #groonga #travel"
          #       ]
          #     ],
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "groonga",
          #         1
          #       ],
          #       [
          #         "travel",
          #         1
          #       ]
          #     ],
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "bob",
          #         1
          #       ]
          #     ]
          #   ]
          # ]

       両方の条件をみたすコメントが1件あります。ドリルダウンの結果も含まれ、Bobによるコメントであ
       ることがわかります。

   ハッシュタグでコメントを検索
       あるハッシュタグのついているコメントを検索します。テーブルの参照関係を逆にたどってみましょ
       う。

       実行例:

          select --table Comments --query hash_tags:@groonga --output_columns posted_by.name,comment --drilldown posted_by
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "posted_by.name",
          #           "ShortText"
          #         ],
          #         [
          #           "comment",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "Bob",
          #         "I've just used 'Try-Groonga' now! #groonga"
          #       ],
          #       [
          #         "Bob",
          #         "I'm come at city of New York for development camp! #groonga #travel"
          #       ]
          #     ],
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "bob",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

       このクエリは#groongaハッシュタグを含む2件のコメントを返します。投稿者のドリルダウン結果
       を2件含んでいて、Bobが投稿したことがわかります。

   ユーザーIDでコメントを検索
       あるユーザーが投稿したコメントを検索します。

       実行例:

          select --table Comments --query posted_by:bob --output_columns comment --drilldown hash_tags
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         4
          #       ],
          #       [
          #         [
          #           "comment",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "First post. test,test..."
          #       ],
          #       [
          #         "@alice Thanks!"
          #       ],
          #       [
          #         "I've just used 'Try-Groonga' now! #groonga"
          #       ],
          #       [
          #         "I'm come at city of New York for development camp! #groonga #travel"
          #       ]
          #     ],
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "groonga",
          #         2
          #       ],
          #       [
          #         "travel",
          #         1
          #       ]
          #     ]
          #   ]
          # ]

       このクエリはBobによる4件のコメントを返します。ハッシュタグによるドリルダウン結果も含ま
       れ、#groongaが2件、#travelが1件であることがわかります。

   ユーザーのお気に入りのコメント一覧
       あるユーザーのお気に入りコメントを検索します。

       実行例:

          select --table Users --query _key:bob --output_columns favorites.posted_by,favorites.comment
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "favorites.posted_by",
          #           "Users"
          #         ],
          #         [
          #           "favorites.comment",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         [
          #           "alice",
          #           "charlie"
          #         ],
          #         [
          #           "I've created micro-blog!",
          #           "@alice @bob I've tried to register!"
          #         ]
          #       ]
          #     ]
          #   ]
          # ]

       このクエリはBobのお気に入りのコメント一覧を返します。

   投稿時間でコメントを検索
       コメントの投稿時間で検索をします。Time 型については data を参照してください。

       ある時刻よりも古いコメントを検索します。

       実行例:

          select Comments --filter 'last_modified<=1268802000' --output_columns posted_by.name,comment,last_modified --drilldown hash_tags,posted_by
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "posted_by.name",
          #           "ShortText"
          #         ],
          #         [
          #           "comment",
          #           "ShortText"
          #         ],
          #         [
          #           "last_modified",
          #           "Time"
          #         ]
          #       ],
          #       [
          #         "Alice",
          #         "I've created micro-blog!",
          #         1268795100.0
          #       ],
          #       [
          #         "Bob",
          #         "First post. test,test...",
          #         1268794800.0
          #       ],
          #       [
          #         "Alice",
          #         "@bob Welcome!!!",
          #         1268795100.0
          #       ],
          #       [
          #         "Bob",
          #         "@alice Thanks!",
          #         1268798400.0
          #       ],
          #       [
          #         "Bob",
          #         "I've just used 'Try-Groonga' now! #groonga",
          #         1268802000.0
          #       ]
          #     ],
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "groonga",
          #         1
          #       ]
          #     ],
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "alice",
          #         2
          #       ],
          #       [
          #         "bob",
          #         3
          #       ]
          #     ]
          #   ]
          # ]

       このクエリは2010/03/17 14:00:00以前の5件のコメントを返します。投稿者によるドリルダウン結果
       も含まれ、Aliceが2件、Bobが3件であることがわかります。

   クエリ拡張
       Groongaの /reference/commands/select コマンドは query_expander  引数を受付ます。これを使う
       とクエリ文字列を拡張することができます。

       例えば、"theater"ではなく"theatre"で検索したとしましょう。クエリ拡張では"theater        OR
       theatre"の結果を返します。このようなやりかたで検索漏れを減らせます。これはユーザーが本当に
       やりたかったことです。

   準備
       クエリ拡張を使うには、文書を格納するテーブルと検索文字列と置換文字列のペアを格納する置換
       テーブルを作る必要があります。置換テーブルでは主キーが元の文字列、ShortText型のカラムが置
       換後の文字列をあらわします。

       それでは文書テーブルと置換テーブルを作成しましょう。

       実行例:

          table_create Doc TABLE_PAT_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Doc body COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Term TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Term Doc_body COLUMN_INDEX|WITH_POSITION Doc body
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Synonym TABLE_PAT_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Synonym body COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Doc
          [
          {"_key": "001", "body": "Play all night in this theater."},
          {"_key": "002", "body": "theatre is British spelling."},
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 2]
          load --table Synonym
          [
          {"_key": "theater", "body": "(theater OR theatre)"},
          {"_key": "theatre", "body": "(theater OR theatre)"},
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 2]

       このようにすると、検索漏れは起こりません。これは置換テーブルがクエリ文字列とし
       て"theater"も"theatre"のいずれも受け付けるからです。

   検索
       では、準備した置換テーブルを使ってみます。まずは query_expander を使わずに select コマンド
       を実行してみましょう。

       実行例:

          select Doc --match_columns body --query "theater"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "body",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "001",
          #         "Play all night in this theater."
          #       ]
          #     ]
          #   ]
          # ]
          select Doc --match_columns body --query "theatre"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "body",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "002",
          #         "theatre is British spelling."
          #       ]
          #     ]
          #   ]
          # ]

       このクエリではクエリ文字列に完全に一致するレコードを返します。

       では、 query_expanderSynonym テーブルの body カラムに対して使ってみましょう。

       実行例:

          select Doc --match_columns body --query "theater" --query_expander Synonym.body
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "body",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "001",
          #         "Play all night in this theater."
          #       ],
          #       [
          #         2,
          #         "002",
          #         "theatre is British spelling."
          #       ]
          #     ]
          #   ]
          # ]
          select Doc --match_columns body --query "theatre" --query_expander Synonym.body
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "body",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "001",
          #         "Play all night in this theater."
          #       ],
          #       [
          #         2,
          #         "002",
          #         "theatre is British spelling."
          #       ]
          #     ]
          #   ]
          # ]

       この場合、クエリ文字列は "theater OR theatre" へと置き換えられます。つまり、検索時に表記揺
       れを考慮して検索できます。

サーバー

   サーバーパッケージ
       groonga   パッケージは全文検索を行うための最小構成のパッケージです。サーバー用途で使うため
       に、設定済みのパッケージを追加でインストールすることができます。

       サーバー用途の2つのパッケージがあります。

       · groonga-httpd (nginxをベースにしたHTTPサーバー)

       · groonga-server-gqtp (/spec/gqtp サーバー)

       groongaがGQTPだけでなく、2つのHTTPサーバーパッケージをサポートしているのには理由がありま
       す。 /spec/gqtp - Groonga Query Transfer Protocol はオーバーヘッドを低減し、パフォーマンス
       を向上させるように設計されていますが、HTTPプロトコルほどクライアントライブラリのサポートが
       ありません。HTTPは枯れたプロトコルなので既存のツールを活用できたり、多くのクライアントライ
       ブラリが存在します。(詳細は   関連プロジェクト  を参照)  groonga-httpd  パッケージを使うと
       nginxの機能の恩恵を受けることができます。

       最初は groonga-httpd  パッケージを使うことをおすすめします。プロトコルのオーバーヘッドがパ
       フォーマンス上問題となったら groonga-server-gqtp を検討してください。

          注釈:
              In  the  previous  versions,  there  is  a groonga-server-http package (simple HTTP
              protocol  based  server  package).  It  is  now  marked  as  obsolete,  please  use
              groonga-httpd  packages  instead. groonga-server-http package became a transitional
              package for groonga-httpd.

   groonga-httpd
       groonga-httpd はnginxをベースにしたHTTPサーバーパッケージです。

       設定済みの内容:

                         ┌─────────────┬───────────────────────────────────────┐
                         │項目         │ 既定値                                │
                         ├─────────────┼───────────────────────────────────────┤
                         │ポート番号   │ 10041                                 │
                         ├─────────────┼───────────────────────────────────────┤
                         │アクセスログ │ /var/log/groonga/httpd/acccess.log    │
                         ├─────────────┼───────────────────────────────────────┤
                         │エラーログ   │ /var/log/groonga/http-query.log       │
                         ├─────────────┼───────────────────────────────────────┤
                         │データベース │ /var/lib/groonga/db/*                 │
                         ├─────────────┼───────────────────────────────────────┤
                         │設定ファイル │ /etc/groonga/httpd/groonga-httpd.conf │
                         └─────────────┴───────────────────────────────────────┘

   HTTPサーバーを起動
       groonga HTTPサーバーを起動(Debian/Ubuntu/CentOS):

          % sudo service groonga-httpd start

       groonga HTTPサーバーを起動(Fedora):

          % sudo systemctl start groonga-httpd

   HTTPサーバーを終了
       groonga HTTPサーバーを終了(Debian/Ubuntu/CentOS):

          % sudo service groonga-httpd stop

       groonga HTTPサーバーを起動(Fedora):

          % sudo systemctl stop groonga-httpd

   HTTPサーバーを再起動
       groonga HTTPサーバーを再起動(Debian/Ubuntu/CentOS):

          % sudo service groonga-httpd restart

       groonga HTTPサーバーを再起動(Fedora):

          % sudo systemctl restart groonga-httpd

   groonga-server-gqtp
       groonga-server-gqtp/spec/gqtp サーバーパッケージです。

                           ┌─────────────┬───────────────────────────────────┐
                           │項目         │ 既定値                            │
                           ├─────────────┼───────────────────────────────────┤
                           │ポート番号   │ 10043                             │
                           ├─────────────┼───────────────────────────────────┤
                           │process-log  │ /var/log/groonga/groonga-gqtp.log │
                           └─────────────┴───────────────────────────────────┘

                           │query-log    │ /var/log/groonga/gqtp-query.log   │
                           ├─────────────┼───────────────────────────────────┤
                           │データベース │ /var/lib/groonga/db/*             │
                           └─────────────┴───────────────────────────────────┘

       サーバー設定ファイル (Debian/Ubuntu):

          /etc/default/groonga/groonga-server-gqtp

       サーバー設定ファイル(CentOS):

          /etc/sysconfig/groonga-server-gqtp

   GQTPサーバーを起動
       groonga GQTPサーバーを起動(Debian/Ubuntu/CentOS):

          % sudo service groonga-server-gqtp start

       groonga GQTPサーバーを起動(Fedora):

          % sudo systemctl start groonga-server-gqtp

   GQTPサーバーを終了
       groonga GQTPサーバーを終了(Debian/Ubuntu/CentOS):

          % sudo service groonga-server-http stop

       groonga GQTPサーバーを終了(Fedora):

          % sudo systemctl stop groonga-server-gqtp

   GQTPサーバーを再起動
       groonga HTTPサーバーを再起動(Debian/Ubuntu/CentOS):

          % sudo service groonga-server-gqtp restart

       groonga HTTPサーバーを再起動(Fedora):

          % sudo systemctl restart groonga-server-gqtp

   groonga-server-http
       groonga-server-http は簡易HTTPサーバーパッケージです。

          注釈:
              groonga-server-http  package  is  the  transitional  package  since  Groonga 4.0.8.
              Please use groonga-httpd instead.

       設定済みの内容:

                           ┌─────────────┬───────────────────────────────────┐
                           │項目         │ 既定値                            │
                           ├─────────────┼───────────────────────────────────┤
                           │ポート番号   │ 10041                             │
                           ├─────────────┼───────────────────────────────────┤
                           │process-log  │ /var/log/groonga/groonga-http.log │
                           ├─────────────┼───────────────────────────────────┤
                           │query-log    │ /var/log/groonga/http-query.log   │
                           ├─────────────┼───────────────────────────────────┤
                           │データベース │ /var/lib/groonga/db/*             │
                           └─────────────┴───────────────────────────────────┘

       サーバー設定ファイル (Debian/Ubuntu):

          /etc/default/groonga/groonga-server-http

       サーバー設定ファイル(CentOS):

          /etc/sysconfig/groonga-server-http

   HTTPサーバーを起動
       groonga HTTPサーバーを起動(Debian/Ubuntu/CentOS):

          % sudo service groonga-server-http start

       groonga HTTPサーバーを起動(Fedora):

          % sudo systemctl start groonga-server-http

   HTTPサーバーを終了
       groonga HTTPサーバーを終了(Debian/Ubuntu/CentOS):

          % sudo service groonga-server-http stop

       groonga HTTPサーバーを終了(Fedora):

          % sudo systemctl stop groonga-server-http

   HTTPサーバーを再起動
       groonga HTTPサーバーを再起動(Debian/Ubuntu/CentOS):

          % sudo service groonga-server-http restart

       groonga HTTPサーバーを再起動(Fedora):

          % sudo systemctl restart groonga-server-http

   HTTP
       Groongaは2つのHTTPサーバー実装を提供しています。

       · http/groonga

       · http/groonga-httpd

       http/groonga    はシンプルな実装です。高速に動作しますがHTTPの機能の多くは実装されていませ
       ん。コマンドラインオプションをいくつか指定するだけで動くのでGroongaを簡単に試すことができ
       ます。

       http/groonga-httpdnginx をベースにした実装です。この実装も高速に動作します。しかも多く
       のHTTPの機能を使えます。

   比較
       groongagroonga-httpd  にはたくさんの違いがあります。以下はそれらの違いを示す比較表で
       す。

               ┌─────────────────────────┬───────────────────────┬───────────────────────┐
               │                         │ groonga               │ groonga-httpd         │
               ├─────────────────────────┼───────────────────────┼───────────────────────┤
               │性能                     │ ○                     │ ○                     │
               ├─────────────────────────┼───────────────────────┼───────────────────────┤
               │複数CPUコア対応          │ ○(マルチスレッドで対 │ ○(マルチプロセスで対 │
               │                         │ 応)                  │ 応)                  │
               ├─────────────────────────┼───────────────────────┼───────────────────────┤
               │設定ファイル             │ なくてもよい          │ 必須                  │
               ├─────────────────────────┼───────────────────────┼───────────────────────┤
               │プレフィックスパスの変更 │ ×                     │ ○                     │
               ├─────────────────────────┼───────────────────────┼───────────────────────┤
               │コマンドバージョンの変更 │ ○                     │ ○                     │
               ├─────────────────────────┼───────────────────────┼───────────────────────┤
               │複数データベース         │ ×                     │ ○                     │
               ├─────────────────────────┼───────────────────────┼───────────────────────┤
               │認証                     │ ×                     │ ○                     │
               ├─────────────────────────┼───────────────────────┼───────────────────────┤
               │gzip圧縮                 │ ×                     │ ○                     │
               ├─────────────────────────┼───────────────────────┼───────────────────────┤
               │POST                     │ ○                     │ ○                     │
               ├─────────────────────────┼───────────────────────┼───────────────────────┤
               │HTTPS                    │ ×                     │ ○                     │
               ├─────────────────────────┼───────────────────────┼───────────────────────┤
               │アクセスログ             │ ×                     │ ○                     │
               ├─────────────────────────┼───────────────────────┼───────────────────────┤
               │ダウンタイムなしでのアッ │ ×                     │ ○                     │
               │プグレード               │                       │                       │
               └─────────────────────────┴───────────────────────┴───────────────────────┘

   性能
       groongagroonga-httpd はどちらも非常に高速です。どちらも同じスループットで動きます。

   複数CPUコア対応
       Groongaは複数のCPUコアを使って性能を向上できます。 groonga  はマルチスレッドを使って性能を
       向上させます。 groonga-httpd はマルチプロセスを使って性能を向上させます。

       groonga    はデフォルトでCPUコアと同じ数のスレッドを使います。もし、CPUコアが8個あった場合
       は、デフォルトで8個のスレッドを使います。

       groonga-httpd             はデフォルトで1つのプロセスを使います。複数のCPUコアを使う場合は
       worker_processes  ディレクティブを設定する必要があります。CPUコアが8個ある場合は、以下のよ
       うに設定ファイルに worker_processes 8 と指定します。:

          worker_processes 8;

          http {
            # ...
          }

   設定ファイル
       groonga は設定ファイルがなくても動きます。ポート番号や最大スレッド数などといった設定項目は
       すべてコマンドラインから指定できます。設定ファイルを使っても設定項目を指定することができま
       す。

       groonga        はいくつかのオプションを指定するだけで実行できるので、非常に簡単にgroonga用
       のHTTPサーバーを起動することができます。以下は  groonga でHTTPサーバーを起動する一番簡単な
       コマンドラインです。:

          % groonga --protocol http -d /PATH/TO/DATABASE

       groonga-httpd を実行するには設定ファイルが必須です。以下は groonga-httpd  でHTTPサーバーを
       実行する一番簡単な設定ファイルです。:

          events {
          }

          http {
            server {
              listen 10041;

              location /d/ {
                groonga on;
                groonga_database /PATH/TO/DATABASE;
              }
            }
          }

   プレフィックスパスの変更
       groonga/d/       から始まるパスをコマンドURLとして受け付けます。例えば、
       http://localhost:10041/d/status となります。この  /d/ というプレフィックスパスを変更するこ
       とはできません。

       groonga-httpd                       はプレフィックスパスを変更することができます。例えば、
       http://localhost:10041/api/status というコマンドURLを使うことができます。以下は /api/ をプ
       レフィックスパスとして使う設定例です。:

          events {
          }

          http {
            server {
              listen 10041;

              location /api/ { # <- change this
                groonga on;
                groonga_database /PATH/TO/DATABASE;
              }
            }
          }

   コマンドバージョンの変更
       Groongaには  /reference/command/command_version という仕組みがあります。これは後方互換性を
       維持したままgroongaコマンドをアップグレードするための仕組みです。

       groonga--default-command-version  オプションでデフォルトのコマンドバージョンを変更でき
       ます。以下はデフォルトのコマンドバージョンとしてコマンドバージョン2を使うコマンドライン例
       です。:

          % groonga --protocol http --default-command-version 2 -d /PATH/TO/DATABASE

       groonga-httpd はまだデフォルトのコマンドバージョンを変更できません。しかし、すぐにサポート
       する予定です。サポートされたら、同じ  groonga-httpd プロセス内で異なったコマンドバージョン
       のgroongaコマンドを提供できます。以下はコマンドバージョン1のコマンドを /api/1/  以下で、コ
       マンドバージョン2のコマンドを /api/2/ 以下で提供するための設定例です。:

          events {
          }

          http {
            server {
              listen 10041;

              groonga_database /PATH/TO/DATABASE;

              location /api/1/ {
                groonga on;
                groogna_default_command_version 1;
              }

              location /api/2/ {
                groonga on;
                groogna_default_command_version 2;
              }
            }
          }

   複数データベース
       groonga は1つのプロセスで1つのデータベースしか使うことができません。

       groonga-httpd は同一プロセス内で複数のデータベースを使うことができます。以下は /tmp/db1 に
       あるデータベースを /db1/ 以下で、 /tmp/db2 にあるデータベースを /db2/ 以下で提供する設定例
       です。:

          events {
          }

          http {
            server {
              listen 10041;

              location /db1/ {
                groonga on;
                groonga_database /tmp/db1;
              }

              location /db2/ {
                groonga on;
                groonga_database /tmp/db2;
              }
            }
          }

   認証
       HTTPではベーシック認証やダイジェスト認証などの認証方法をサポートしています。認証することに
       より  /reference/commands/shutdown  などのように危険なコマンドの実行を制限することができま
       す。

       groonga では認証できません。危険なコマンドの使用を制限するためには、iptablesやリバースプロ
       キシなど他のツールを使う必要があります。

       groonga-httpd はベーシック認証をサポートしています。以下は /reference/commands/shutdown コ
       マンドの使用を制限する設定例です。:

          events {
          }

          http {
            server {
              listen 10041;

              groonga_database /PATH/TO/DATABASE;

              location /d/shutdown {
                groonga on;
                auth_basic           "manager is required!";
                auth_basic_user_file "/etc/managers.htpasswd";
              }

              location /d/ {
                groonga on;
              }
            }
          }

   gzip圧縮
       HTTPは Content-Encoding: gzip レスポンスヘッダーを付けてgzipでレスポンスを圧縮する機能をサ
       ポートしています。これはネットワーク流量を小さくすることができます。大きな検索結果を返すと
       きに有用です。

       groonga は圧縮をサポートしていません。圧縮をサポートするためには、リバースプロキシを使う必
       要があります。

       groonga-httpd     はgzip圧縮をサポートしています。以下はレスポンスをgzipで圧縮する設定例で
       す。:

          events {
          }

          http {
            server {
              listen 10041;

              groonga_database /PATH/TO/DATABASE;

              location /d/ {
                groonga    on;
                gzip       on;
                gzip_types *;
              }
            }
          }

       gzip_types     *    を指定していることに注意してください。この設定はとても重要な設定です。
       gzip_types   はgzip対象のデータフォーマットをMIMEタイプで指定します。   groonga-httpd   は
       JSON、XML、MessagePackのどれかのフォーマットでデータを返します。しかし、これらのフォーマッ
       トは gzip_types のデフォルト値に含まれていません。 gzip_types  のデフォルト値は  text/html
       です。

       groonga-httpd    のレスポンスデータをgzip圧縮するには、明示的に    gzip_types   *   または
       gzip_types  application/json  text/xml  application/x-msgpack   と指定する必要があります。
       gzip_types * の方がおすすめです。理由は2つあります。1つは、groongaが、将来、他のフォーマッ
       トもサポートする可能性もあるからという理由です。2つめは、この location  のすべてのリクエス
       トはgroongaが処理するので、他のモジュールのことについて考えなくてもよいからという理由で
       す。

   POST
       JSONデータをPOSTすることでデータをロードすることができます。POSTでロードする場合は以下の
       ルールに従ってください。

       · Content-Type ヘッダーの値を application/json にする。

       · JSONデータはbodyとして送る。

       · テーブル名は table=名前 というようにクエリーパラメーターで指定する。

       以下はcurlを使って alicebob という2人のユーザーを Users テーブルにロードするコマンドラ
       インの例です:

          % curl --data-binary '[{"_key": "alice"}, {"_key": "bob"}]' -H "Content-Type: application/json" "http://localhost:10041/d/load?table=Users"

   HTTPS
       TODO

   アクセスログ
       TODO

   ダウンタイムなしでのアップグレード
       TODO

   groonga
       TODO

   groonga-httpd
       TODO

   GQTP
   Summary
       GQTP is the acronym standing for "Groonga Query Transfer Protocol".

       GQTP is a protocol designed for Groonga. It's a stateful protocol. You can  send  multiple
       commands in one session.

       GQTP  will  be  faster  rather  than  /server/http  when you send many light commands like
       /reference/commands/status. GQTP will be almost same performance as  HTTP  when  you  send
       heavy commands like /reference/commands/select.

       We  recommend  that  you  use  HTTP  for  many  cases.  Because there are many HTTP client
       libraries.

       If you want to use GQTP, you can use the following libraries:

          · Ruby: groonga-client

          · Python: poyonga

          · Go: goroo

          · PHP: proonga

          · C/C++: Groonga (Groonga can be also used as library)

       ライブラリではありませんが、/reference/executables/groonga  をGQTPクライアントとして使えま
       す。

   How to run
       /reference/executables/groonga  is  a  GQTP  server implementation.  You can run a Groonga
       server by the following command line:

          groonga --protocol gqtp -s [options] DB_PATH

       You can run a Groonga server as a daemon by the following command line:

          groonga --protocol gqtp -d [options] DB_PATH

       利用可能なオプションについては、 /reference/executables/groonga を参照してください。

   Memcachedバイナリプロトコル
       Groongaはmemcachedバイナリプロトコルをサポートしています。以下の書式はmemcachedバイナリプ
       ロトコルのサーバをデーモンとして起動する方法を示しています。

       Form:

          groonga [-p PORT_NUMBER] -d --protocol memcached DB_PATH

       --protocol            オプションとその引数により、サーバのプロトコルを指定することができま
       す。"memcached"はmemcachedバイナリプロトコルを示しています。

       テーブルの作成は不要です。Groongaは要求を受けつけると自動的にテーブルを作成するからで
       す。テーブルの名前は Memcache になります。

クライアント

       Groongaは、Groongaの専用プロトコルである  /spec/gqtp 、memcachedバイナリプロトコル、HTTPの
       三種類をサポートしています。

       HTTPとmemcachedバイナリプロトコルは、枯れたプロトコルなので既存のクライアントライブラリを
       利用することができます。

       いくつかのプログラミング言語ではGroongaサーバーに接続するための便利なAPIを提供するクライアントライブラリがあります。詳細は、‐
       クライアントライブラリ を参照して下さい。

リファレンスマニュアル

   実行ファイル
       groongaパッケージが提供する実行ファイルについて説明します。

   grndb
   概要
       注釈:
          この実行ファイルは実験的な機能です。

       バージョン 4.0.9 で追加.

       grndb はGroongaのデータベースを管理します。

       機能は次の通りです。

          · データベースが壊れているかどうかをチェックする。

          · 壊れたデータベースが復旧可能なら自動でデータベースを復旧する。

   構文
       grndb にはコマンドとデータベースのパスを渡します。:

          grndb COMMAND [OPTIONS] DATABASE_PATH

       利用可能なコマンドは以下の通りです。

          · check - データベースが壊れているかどうかをチェックします。

          · recover - データベースを復旧します。

   使い方
       以下は /var/lib/groonga/db/db にあるデータベースをチェックする例です:

          % grndb check /var/lib/groonga/db/db

       以下は /var/lib/groonga/db/db にあるデータベースを復旧する例です:

          % grndb recover /var/lib/groonga/db/db

   コマンド一覧
       このセクションでは利用可能なコマンドについて説明します。

   check
       既存のGroongaデータベースをチェックします。もし、データベースが壊れていたら grndb は詳細を
       報告し、 0 以外の終了ステータスで終了します。

       注釈:
          このコマンドを他のプロセスが開いているデータベースに対しては使ってはいけません。も
          し、データベースが他のプロセスから開かれていると、このコマンドは間違った結果を報告する
          可能性があります。

       check にはいくつかオプションがあります。

   --target
       バージョン 5.1.2 で追加.

       チェック対象のオブジェクトを指定します。

       もし、データベースが大きく、かつ、信頼できないオブジェクトがわかっているなら、このオプショ
       ンが役に立つでしょう。 check は大きなデータベースほど処理に時間がかかります。 --target  オ
       プションでチェック対象を限定することでチェック時間を削減できます。

       check はチェック対象を再帰的にチェックします。なぜなら、信頼できないオブジェクトに関連する
       オブジェクトも信頼できないことが多いからです。

       チェック対象がテーブルの場合、そのテーブルのすべてのカラムも再帰的にチェックします。

       チェック対象がテーブルでテーブルのキーの型が他のテーブルの場合、他のテーブルも再帰的に
       チェックします。

       チェック対象がカラムで値の型がテーブルの場合、そのテーブルも再帰的にチェックします。

       チェック対象がインデックスカラムの場合、値の型に指定したテーブルとすべてのソースも再帰的に
       チェックします。

       以下は Entries テーブルとそのカラムだけをチェックする例です。:

          % grndb check --target Entries /var/lib/groonga/db/db

       以下は Entries.name カラムだけをチェックする例です。:

          % grndb check --target Entries.name /var/lib/groonga/db/db

   recover
       既存の壊れたGroongaデータベースを復旧します。

       もしデータベースが壊れていなかったら、 grndb は何もせず終了ステータス 0 で終了します。

       もしデータベースが壊れていて、壊れているのがインデックスカラムだけなら、 grndb  は壊れてい
       るインデックスカラムを復旧して終了ステータス  0 で終了します。インデックス対象のデータが大
       きい場合は復旧に長時間かかることもあります。

       もしデータベースが壊れていて、壊れているのがテーブルまたはデータカラムの場合は、 grndb  は
       壊れている原因を報告して  0 以外の終了ステータスで終了します。データベースを復旧可能かどう
       かは check コマンドで確認できます。

       注釈:
          このコマンドを他のプロセスが開いているデータベースに対しては使ってはいけません。も
          し、データベースが他のプロセスから開かれていると、このコマンドはデータベースを壊してし
          まう可能性があります。

   grnslap
   名前
       grnslap - groongaプロセスの通信層のパフォーマンスをチェックするツール

   書式
          grnslap [options] [dest]

   説明
       grnslapは、groongaプロセスに対してリクエストを多重に行い、パフォーマンスをチェックするため
       のツールです。

       Groonga独自プロトコルであるGQTPと、httpの両プロトコルでリクエストを行うことができます。ま
       た、リクエストの多重度を指定することができます。

       クエリの内容を標準入力から与えることができます。実稼動環境でのクエリパタンに近いクエリを標
       準入力に与えることによって、実稼動環境に近い状態での検証を行うことができます。

       現在は、make installしてもインストールは行われない。

   オプション
       -P     リクエストのプロトコルを指定します。

              http
                 httpでリクエストします。対象のhttpのパス群(GETパラメータを含む)をLF区切り形式で
                 標準入力に与えると、それらのパスに順次アクセスします。

              gqtp
                 gqtpでリクエストします。gqtpのリクエストをLF区切り形式で標準入力に与えると、それ
                 らのリクエストを順次行います。

       -m     リクエストの多重度を指定します。初期値は10です。

   引数
       dest   接続先のホスト名とポート番号をを指定します(デフォルト値は'localhost:10041')。ポート
              番号を指定しない場合には、10041が指定されたものとします。

   サンプル
       http://localhost:10041/d/status に、多重度100でリクエストを行う。

          > yes /d/status | head -n 100 | grnslap -P http -m 100 localhost:10041
          2009-11-12 19:34:09.998696|begin: max_concurrency=100 max_tp=10000
          2009-11-12 19:34:10.011208|end  : n=100 min=46 max=382 avg=0 qps=7992.966190 etime=0.012511

   groonga executable file
   概要
       groonga 実行ファイルは以下の機能を提供します。:

          · 全文検索(サーバー)

          · 全文検索(シェル)

          · Client for Groonga fulltext search server

       Groonga can be used as a library. If you want to use Groonga as a  library,  you  need  to
       write  a  program in C, C++ and so on. Library use is useful for embedding fulltext search
       feature to your application, but it's not easy to use.

       You can use groonga executable file to get fulltext search feature.

       If you want to try Groonga, fulltext search shell usage is  useful.  You  don't  need  any
       server and client. You just need one terminal. You can try Groonga like the following:

          % groonga -n db
          > status
          [[0,1429687763.70845,0.000115633010864258],{"alloc_count":195,...}]
          > quit
          %

       If  you  want  to  create an application that has fulltext search feature, fulltext search
       server usage is useful. You can use Groonga as a server like  RDBMS  (Relational  DataBase
       Management System). Client-server model is a popular architecture.

       Normally, client for Groonga fulltext server usage isn't used.

   構文
       groonga 実行ファイルには以下の4つのモードがあります。

          · Standalone mode

          · Server mode

          · Daemon mode

          · Client mode

       There are common options in these modes. These common options is described later section.

   Standalone mode
       In  standalone  mode,  groonga executable file runs one or more Groonga /reference/command
       against a local Groonga database.

       Here is the syntax to run shell that executes Groonga command against temporary database:

          groonga [options]

       Here is the syntax to create a new database and run shell that  executes  Groonga  command
       against the new database:

          groonga [options] -n DB_PATH

       Here is the syntax to run shell that executes Groonga command against existing database:

          groonga [options] DB_PATH

       Here is the syntax to run Groonga command against existing database and exit:

          groonga [options] DB_PATH COMMAND [command arguments]

   Server mode
       In  server  mode, groonga executable file runs as a server. The server accepts connections
       from other processes at local machine or remote  machine  and  executes  received  Groonga
       /reference/command against a local Groonga database.

       You can choose one protocol from /server/http and /server/gqtp. Normally, HTTP is suitable
       but GQTP is the default protocol. This section describes only about HTTP protocol usage.

       In server mode, groonga executable file runs in the foreground. If you want to run Groonga
       server in the background, see Daemon mode.

       Here is the syntax to run Groonga server with temporary database:

          groonga [options] --protocol http -s

       Here is the syntax to create a new database and run Groonga server with the new database:

          groonga [options] --protocol http -s -n DB_PATH

       Here is the syntax to run Groonga server with existing database:

          groonga [options] --protocol http -s DB_PATH

   Daemon mode
       In  daemon mode, groonga executable file runs as a daemon. Daemon is similar to server but
       it runs in the background. See Server mode about server.

       Here is the syntax to run Groonga daemon with temporary database:

          groonga [options] --protocol http -d

       Here is the syntax to create a new database and run Groonga daemon with the new database:

          groonga [options] --protocol http -d -n DB_PATH

       Here is the syntax to run Groonga daemon with existing database:

          groonga [options] --protocol http -d DB_PATH

       --pid-path option will be useful for daemon mode.

   Client mode
       In client mode, groonga executable file runs as a client for GQTP protocol Groonga server.
       Its  usage  is  similar to Standalone mode. You can run shell and execute one command. You
       need to specify server address instead of local database.

       Note that you can use groonga executable file  as  a  client  for  HTTP  protocol  Groonga
       server.

       Here  is the syntax to run shell that executes Groonga command against Groonga server that
       is running at 192.168.0.1:10043:

          groonga [options] -c --host 192.168.0.1 --port 10043

       Here is the syntax to run Groonga command  against  Groonga  server  that  is  running  at
       192.168.0.1:10043 and exit:

          groonga [options] -c --host 192.168.0.1 --port 10043 COMMAND [command arguments]

   Options
       -n     新しいデータベースを作成します。

       -c     Executes groonga command in client mode.

       -s     Executes groonga command in server mode. Use "Ctrl+C" to stop the groonga process.

       -d     Executes  groonga  command  in  daemon  mode.  In  contrast to server mode, groonga
              command forks in daemon mode. For example, to stop local daemon process, use  "curl
              http://127.0.0.1:10041/d/shutdown".

       -e, --encoding <encoding>
              Specifies  encoding  which  is  used for Groonga database. This option is effective
              when you create  new  Groonga  database.   This  parameter  specifies  one  of  the
              following values: none, euc, utf8, sjis, latin or koi8r.

       -l, --log-level <log level>
              Specifies log level. A integer value between 0 and 8. The meaning of value is:

                                        ┌──────────┬───────────┐
                                        │log level │ 説明      │
                                        ├──────────┼───────────┤
                                        │0         │ なし      │
                                        ├──────────┼───────────┤
                                        │1         │ Emergency │
                                        ├──────────┼───────────┤
                                        │2         │ Alert     │
                                        ├──────────┼───────────┤
                                        │3         │ Critical  │
                                        ├──────────┼───────────┤
                                        │4         │ Error     │
                                        ├──────────┼───────────┤
                                        │5         │ Warning   │
                                        └──────────┴───────────┘

                                        │6         │ Notice    │
                                        ├──────────┼───────────┤
                                        │7         │ Info      │
                                        ├──────────┼───────────┤
                                        │8         │ Debug     │
                                        └──────────┴───────────┘

       -a, --address <ip/hostname>
              バージョン 1.2.2 で撤廃: Use --bind-address instead.

       --bind-address <ip/hostname>
              バージョン 1.2.2 で追加.

              サーバモードかデーモンモードで実行するとき、listenするアドレスを指定します。(デフォ
              ルトは hostname の返すホスト名)

       -p, --port <port number>
              クライアント、サーバ、またはデーモンモードで使用するTCPポート番号。   (クライアント
              モードのデフォルトは10043番、サーバ、またはデーモンモードのデフォルトは、HTTPの場
              合、10041番、GQTPの場合、10043番)

       -i, --server-id <ip/hostname>
              サーバモードかデーモンモードで実行するとき、サーバのIDとなるアドレスを指定しま
              す。(デフォルトは`hostname`の返すホスト名)

       -h, --help
              ヘルプメッセージを出力します。

       --document-root <path>
              httpサーバとしてgroongaを使用する場合に静的ページを格納するディレクトリを指定しま
              す。

              デフォルトでは、データベースを管理するための汎用的なページに対応するファイル
              が/usr/share/groonga/admin_html以下にインストールされます。このディレクトリ
              をdocument-rootオプションの値に指定して起動した場合、ウェブブラウザ
              でhttp://hostname:port/index.htmlにアクセスすると、ウェブベースのデータベース管理
              ツールを使用できます。

       --protocol <protocol>
              http,gqtpのいずれかを指定します。(デフォルトはgqtp)

       --log-path <path>
              ログを出力するファイルのパスを指定します。(デフォルト
              は/var/log/groonga/groonga.logです)

       --log-rotate-threshold-size <threshold>
              バージョン 5.0.3 で追加.

              ログローテーションの閾値を指定します。ログファイルのサイズが閾値に指定した値以上に
              なると、ローテートされます。(デフォルトは0(無効)です)

       --query-log-path <path>
              クエリーログを出力するファイルのパスを指定します。(デフォルトでは出力されません)

       --query-log-rotate-threshold-size <threshold>
              バージョン 5.0.3 で追加.

              クエリーログのローテーションの閾値を指定します。クエリーログファイルのサイズが閾値
              に指定した値以上になると、ローテートされます。(デフォルトは0(無効)です)

       -t, --max-threads <max threasd>
              最大で利用するスレッド数を指定します。(デフォルトはマシンのCPUコア数と同じ数です)

       --pid-path <path>
              PIDを保存するパスを指定します。(デフォルトでは保存しません)

       --config-path <path>
              設定ファイルのパスを指定します。設定ファイルは以下のようなフォーマットになります。:

                 # '#'以降はコメント。
                 ; ';'以降もコメント。

                 # 'キー = 値'でオプションを指定。
                 pid-path = /var/run/groonga.pid

                 # '='の前後の空白はは無視される。↓は↑と同じ意味。
                 pid-path=/var/run/groonga.pid

                 # 'キー'は'--XXX'スタイルのオプション名と同じものが使える。
                 # 例えば、'--pid-path'に対応するキーは'pid-path'。
                 # ただし、キーが'config-path'のオプションは無視される。

       --cache-limit <limit>
              キャッシュ数の最大値を指定します。(デフォルトは100です)

       --default-match-escalation-threshold <threshold>
              検索の挙動をエスカレーションする閾値を指定します。(デフォルトは0です)

   コマンドライン引数
       dest   使用するデータベースのパス名を指定します。

              クライアントモードの場合は接続先のホスト名とポート番号を指定します(デフォルト値
              は'localhost:10043')。ポート番号を指定しない場合には、10043が指定されたものとしま
              す。

       command [args]
              スタンドアロンおよびクライアントモードの場合は、実行するコマンドとその引数をコマン
              ドライン引数に指定できます。コマンドライン引数にcommandを与えなかった場合は、標準入
              力から一行ずつEOFに達するまでコマンド文字列を読み取り、順次実行します。

   コマンド
       groongaコマンドを通してデータベースを操作する命令をコマンドと呼びます。コマンドは主にC言語
       で記述され、groongaプロセスにロードすることによって使用できるようになります。 それぞれのコ
       マンドは一意な名前と、0個以上の引数を持ちます。

       引数は以下の2種類の方法のいずれかで指定することができます。:

          形式1: コマンド名 値1 値2,..

          形式2: コマンド名 --引数名1 値1 --引数名2 値2,..

       形式1でコマンドを実行する場合は、定義された順番で値を指定しなければならず、途中の引数の値
       を省略することはできません。形式2でコマンドを実行する場合は、「--引数名」のように引数の名
       前を明示しなければならない代わりに、任意の順番で引数を指定することが可能で、途中の引数の指
       定を省略することもできます。

       標準入力からコマンド文字列を与える場合は、コマンド名と引数名と値は、空白(      )で区切りま
       す。空白や、記号「"'()」のうちいずれかを含む値を指定したい場合は、シングルクォート(')かダ
       ブルクォート(")で値を囲みます。値として指定する文字列の中では、改行文字は'n'に置き換えて指
       定します。また、引用符に使用した文字を値の中で指定する場合には、その文字の前にバックスラッ
       シュ('')  を指定します。バックスラッシュ文字自身を値として指定する場合には、その前にバック
       スラッシュを指定します。

       '\'文字で継続行であることを明示してコマンドリストを記述することができます。

          table_create --name Terms \
                       --flags TABLE_PAT_KEY \
                       --key_type ShortText \
                       --default_tokenizer TokenBigram

   組み込みコマンド
       以下のコマンドは組み込みコマンドとして予め定義されています。

          status groongaプロセスの状態を表示します。

          table_list
                 DBに定義されているテーブルのリストを表示します。

          column_list
                 テーブルに定義されているカラムのリストを表示します。

          table_create
                 DBにテーブルを追加します。

          column_create
                 テーブルにカラムを追加します。

          table_remove
                 DBに定義されているテーブルを削除します。

          column_remove
                 テーブルに定義されているカラムを削除します。

          load   テーブルにレコードを挿入します。

          select テーブルに含まれるレコードを検索して表示します。

          define_selector
                 検索条件をカスタマイズした新たな検索コマンドを定義します。

          quit   データベースとのセッションを終了します。

          shutdown
                 サーバ(デーモン)プロセスを停止します。

          log_level
                 ログ出力レベルを設定します。

          log_put
                 ログ出力を行います。

          clearlock
                 ロックを解除します。

   使い方
       新しいデータベースを作成します。:

          % groonga -n /tmp/hoge.db quit
          %

       作成済みのデータベースにテーブルを定義します。:

          % groonga /tmp/hoge.db table_create Table 0 ShortText
          [[0]]
          %

       サーバを起動します。:

          % groonga -d /tmp/hoge.db
          %

       httpサーバとして起動します。:

          % groonga -d -p 80 --protocol http --document-root /usr/share/groonga/admin_html /tmp/hoge.db
          %

       サーバに接続し、テーブル一覧を表示します。:

          % groonga -c localhost table_list
          [[0],[["id","name","path","flags","domain"],[256,"Table","/tmp/hoge.db.0000100",49152,14]]]
          %

   groonga-benchmark
   名前
       groonga-benchmark - groongaテストプログラム

   書式
          groonga-benchmark  [options...] [script] [db]

   説明
       groonga-benchmarkは、groonga汎用ベンチマークツールです。

       groongaを単独のプロセスとして利用する場合はもちろん、サーバプログラムとして利用する場合の
       動作確認や実行速度測定が可能です。

       groonga-benchmark用のデータファイルは自分で作成することも既存のものを利用することもできま
       す。既存のデータファイルは、ftp.groonga.orgから必要に応じダウンロードします。そのた
       め、groonga及びgroonga-benchmarkが動作し、インターネットに接続できる環境であればgroongaコ
       マンドの知識がなくてもgroongaの動作を確認できます。

       現在は、Linux 及びWindows上で動作します。make installしてもインストールは行われません。

   オプション
       -i, --host <ip/hostname>
              接続するgroongaサーバを、ipアドレスまたはホスト名で指定します。指定先にgroongaサー
              バが立ち上がっていない場合、接続不能となることに注意してください。このオプションを
              指定しない場合、groonga-benchmarkは自動的にlocalhostのgroongaサーバを起動して接続し
              ます。

       -p, --port <port number>
              自動的に起動するgroongaサーバ、または明示的に指定した接続先のgroonga サーバが利用す
              るポート番号を指定します。接続先のgroongaサーバが利用しているポートと、このオプショ
              ンで指定したポート番号が異なる場合、接続不能となることに注意してください。

       --dir  ftp.groonga.org に用意されているスクリプトファイルを表示します。

       --ftp  ftp.groonga.orgとFTP通信を行い、scriptファイルの同期やログファイルの送信を行いま
              す。

       --log-output-dir
              デフォルトでは、groonga-benchmark終了後のログファイルの出力先ははカレントディレクト
              リです。このオプションを利用すると、任意のディレクトリに出力先を変更することができ
              ます。

       --groonga <groonga_path>
              groongaコマンドのパスを指定します。デフォルトでは、PATHの中からgroongaコマンドを探
              します。

       --protocol <gqtp|http>
              groongaコマンドが使うプロトコルとして gqtp または http を指定します。

   引数
       script groonga-benchmarkの動作方法(以下、groonga-benchmark命令と呼びます)を記述したテキス
              トファイルです。拡張子は.scrです。

       db     groonga-benchmarkが利用するgroonga データベースです。指定されたデータベースが存在し
              ない場合、groonga-benchmarkが新規に作成します。またgroonga サーバを自動的に起動する
              場合もこの引数で指定したデータベースが利用されます。接続するgroonga  サーバを明示的
              に指定した場合に利用するデータベースは、接続先サーバが使用中のデータベースになるこ
              とに注意してください。

   使い方
       まず、シェル上(Windowsならコマンドプロンプト上)で:

          groonga-benchmark test.scr 任意のDB名

       とタイプしてください。もしgroonga-benchmarkが正常に動作すれば、:

          test-ユーザ名-数字.log

       というファイルが作成されるはずです。作成されない場合、このドキュメントの「トラブルシュー
       ティング」の章を参照してください。

   スクリプトファイル
       スクリプトファイルは、groonga-benchmark命令を記述したテキストファイルです。  ";"セミコロン
       を利用して、一行に複数のgroonga-benchmark命令を記述することができます。一行に複数
       のgroonga-benchmark命令がある場合、各命令は並列に実行されます。  "#"で始まる行はコメントと
       して扱われます。

   groonga-benchmark命令
       現在サポートされているgroonga-benchmark命令は以下の11種類です。
          do_local コマンドファイル [スレッド数] [繰り返し数]
              コマンドファイルをgroonga-benchmark単体で実行します。スレッド数が指定されている場
              合、複数のスレッドで同じコマンドファイルを同時に実行します。繰り返し数が指定されて
              い場合、コマンドファイルの内容を繰り返し実行します。スレッド数、繰り返し数とも省略
              時は1です。1スレッドで複数回動作させたい場合は、do_local コマンドファイル 1 [繰り返
              し数]と明示的に指定してください。

          do_gqpt コマンドファイル [スレッド数] [繰り返し数]
              コマンドファイルをgroongaサーバでGQTP経由で実行します。スレッド数や繰り返し数の意味
              はdo_localの場合と同じです。

          do_http コマンドファイル [スレッド数] [繰り返し数]
              コマンドファイルをgroongaサーバでHTTP経由で実行します。スレッド数や繰り返し数の意味
              はdo_localの場合と同じです。

          rep_local コマンドファイル [スレッド数] [繰り返し数]
              コマンドファイルをgroonga-benchmark単体で実行し、より詳細な報告を行います。

          rep_gqpt コマンドファイル [スレッド数] [繰り返し数]
              コマンドファイルをgroongaサーバでGQTP経由で実行し、より詳細な報告を行います。    ス
              レッド数や繰り返し数の意味はdo_localと 同じです。

          rep_http コマンドファイル [スレッド数] [繰り返し数]
              コマンドファイルをgroongaサーバでHTTP経由で実行し、より詳細な報告を行います。    ス
              レッド数や繰り返し数の意味はdo_localと 同じです。

          out_local コマンドファイル 入力ファイル名
              コマンドファイルをgroonga-benchmark単体で実行し、各コマンドの実行結果をすべて”出力
              ファイル"に書きだします。この結果は、test_local, test_gqtp命令で利用します。なおこ
              の命令の「出力ファイル」とは、groonga-benchmark実行時に自動的に作成されるログとは別
              のものです。groonga-benchmarkではコメントが利用できる以外、:

                 groonga < コマンドファイル > 出力ファイル

              とした場合と同じです。

          out_gqtp コマンドファイル 出力ファイル名
              コマンドファイルをgroongaサーバでGQTP経由で実行します。その他はout_local命令と同等
              です。

          out_http コマンドファイル 出力ファイル名
              コマンドファイルをgroongaサーバでHTTP経由で実行します。その他はout_local命令と同等
              です。

          test_local コマンドファイル 入力ファイル名
                 コマンドファイルをgroonga-benchmark単体で実行し、各コマンドの実行結果を入力ファ
                 イルと比較します。処理時間など本質的要素以外に差分があった場合、差分を、入力ファ
                 イル.diffというファイルに書きだします。

   コマンドファイル
       コマンドファイルは、groonga組み込みコマンドを1行に1つずつ記述したテキストファイルです。拡
       張子に制限はありません。groonga組み込みコマンドに関しては  /reference/command を参照してく
       ださい。

   サンプル
       スクリプトファイルのサンプルです。:

          # sample script
          rep_local test.ddl
          do_local test.load;
          do_gqtp test.select 10 10; do_local test.status 10

       上記の意味は以下のとおりです。

          1行目  コメント行。

          2行目  test.ddl というコマンドファイルをgroonga単体で実行し、詳細に報告する。

          3行目  test.load  というコマンドファイルをgroonga単体で実行する。(最後の";"セミコロンは
                 複数のgroonga-benchmark命令を記述する場合に必要ですが、この例のように1つ
                 のgroonga-benchmark命令を実行する場合に付与しても問題ありません。)

          4行目  test.select  というコマンドファイルをgroongaサーバで10個のスレッドで同時に実行す
                 る。各スレッドはtest.selectの中身を10回繰り返す。また同時に、groonga単体
                 でtest.statusというコマンドファイルを10個のスレッドで実行する。

   特殊命令
       スクリプトファイルのコメント行には特殊コマンドを埋め込むことが可能です。現在サポートされて
       いる特殊命令は以下の二つです。

          #SET_HOST <ip/hostname>
                 -i, --hostオプションと同等の機能です。コマンドラインオプションに指定したIPアドレ
                 ス/ホスト名と、SET_HOSTで指定したIPアドレス/ホスト名が異なる場合、またコマンドラ
                 インオプションを指定しなかった場合にもSET_HOSTが優先されます。SET_HOSTを利用した
                 場合、サーバが自動的には起動されないのもコマンドラインオプションで指定した場合と
                 同様です。

          #SET_PORT <port number>
                 -p,  --port オプションと同等の機能です。コマンドラインオプションに指定したポート
                 番号とSET_PORTで指定したポート番号が異なる場合、またコマンドラインオプションを指
                 定しなかった場合にもSET_PORTが優先されます。

       特殊命令はスクリプトファイルの任意の場所に書き込むことができます。同一ファイル内に複数回特
       殊命令を記述した場合、「最後の」特殊命令が有効となります。

       例えば、

          $ ./groonga-benchmark --port 20010 test.scr testdb

       とコマンド上でポートを指定した場合でも、もしtest.scrの中身が

          #SET_PORT 10900
          rep_local test.ddl
          do_local test.load;
          rep_gqtp test.select 10 10; rep_local test.status 10
          #SET_PORT 10400

       であれば、自動的に起動されるgroongaサーバはポート番号10400を利用します。

   groonga-benchmark実行結果
       groonga-benchmarkが正常に終了すると、(拡張子を除いた)スクリプト名-ユーザ名-実行開始時
       刻.logという形式のログファイルがカレントディレクトリに作られます。ログファイルは自動的
       にftp.groonga.org に送信されます。ログファイルは以下のようなjson形式のテキストです。

          [{"script": "test.scr",
            "user": "homepage",
            "date": "2010-04-14 22:47:04",
            "CPU": Intel(R) Pentium(R) 4 CPU 2.80GHz",
            "BIT": 32,
            "CORE": 1,
            "RAM": "975MBytes",
            "HDD": "257662232KBytes",
            "OS": "Linux 2.4.20-24.7-i686",
            "HOST": "localhost",
            "PORT": "10041",
            "VERSION": "0.1.8-100-ga54c5f8"
          },
          {"jobs": "rep_local test.ddl",
          "detail": [
          [0, "table_create res_table --key_type ShortText", 1490, 3086, [0,1271252824.25846,0.00144
          7]],
          [0, "column_create res_table res_column --type Text", 3137, 5956, [0,1271252824.2601,0.002
          741]],
          [0, "column_create res_table user_column --type Text", 6020, 8935, [0,1271252824.26298,0.0
          02841]],
          [0, "column_create res_table mail_column --type Text", 8990, 11925, [0,1271252824.26595,0.
          002861]],
          [0, "column_create res_table time_column --type Time", 12008, 13192, [0,1271252824.26897,0
          .001147]],
          [0, "status", 13214, 13277, [0,1271252824.27018,3.0e-05]],
          [0, "table_create thread_table --key_type ShortText", 13289, 14541, [0,1271252824.27025,0.
          001213]],
          [0, "column_create thread_table thread_title_column --type ShortText", 14570, 17380, [0,12
          71252824.27153,0.002741]],
          [0, "status", 17435, 17480, [0,1271252824.2744,2.7e-05]],
          [0, "table_create lexicon_table --flags 129 --key_type ShortText --default_tokenizer Token
          Bigram", 17491, 18970, [0,1271252824.27446,0.001431]],
          [0, "column_create lexicon_table inv_res_column 514 res_table res_column ", 18998, 33248,
          [0,1271252824.27596,0.01418]],
          [0, "column_create lexicon_table inv_thread_column 514 thread_table thread_title_column ",
           33285, 48472, [0,1271252824.29025,0.015119]],
          [0, "status", 48509, 48554, [0,1271252824.30547,2.7e-05]]],
          "summary" :[{"job": "rep_local test.ddl", "latency": 48607, "self": 47719, "qps": 272.4281
          73, "min": 45, "max": 15187, "queries": 13}]},
          {"jobs": "do_local test.load; ",
          "summary" :[{"job": "do_local test.load", "latency": 68693, "self": 19801, "qps": 1010.049
          997, "min": 202, "max": 5453, "queries": 20}]},
          {"jobs": "do_gqtp test.select 10 10; do_local test.status 10",
          "summary" :[{"job": " do_local test.status 10", "latency": 805990, "self": 737014, "qps":
          54.273053, "min": 24, "max": 218, "queries": 40},{"job": "do_gqtp test.select 10 10", "lat
          ency": 831495, "self": 762519, "qps": 1967.164097, "min": 73, "max": 135631, "queries": 15
          00}]},
          {"total": 915408, "qps": 1718.359464, "queries": 1573}]

   制限事項
       · スクリプトファイルの一行には複数のgroonga-benchmark命令を記述できますが、すべてのスレッ
         ド数の合計は最大64までに制限されます。

       · コマンドファイル中のgroongaコマンドの長さは最長5000000byteです。

   トラブルシューティング
       もし、groonga-benchmarkが正常に動作しない場合、まず以下を確認してください。

       · インターネットに接続しているか? --ftp オプションを指定すると、groonga-benchmarkは動作の
         たびにftp.groonga.orgと通信します。ftp.groonga.orgと通信可能でない場
         合、groonga-benchmarkは正常に動作しません。

       · groonga サーバが動作していないか? groonga-benchmarkは、-i, --host オプションで明示的に
         サーバを指定しないかぎり、自動的にlocalhostのgroongaサーバを立ち上げます。すで
         にgroongaサーバが動作している場合、groonga-benchmarkは正常に動作しない可能性があります。

       · 指定したDBが適切か? groonga-benchmarkは、引数で指定したDBの中身はチェックしません。もし
         指定されたDBが存在しなければ自動的にDBを作成しますが、もしファイルとして存在する場合は中
         身に関わらず動作を続けてしまい、結果が異常になる可能性があります。

       以上の原因でなければ、問題はgroonga-benchmarkかgroongaにあります。ご報告をお願いします。

   groonga-httpd
   概要
       groonga-httpdはGroongaサーバーとHTTPプロトコルで通信するプログラムです。      機能的には、
       groonga-server-http と同じです。 groonga-server-http  はHTTPサーバーとしては最小限の機能し
       か持ちませんが、groonga-httpdは  nginx を組み込むことでnginxが準拠しているHTTPの仕様と機能
       をすべて利用できます。

       groonga-httpdにはHTML + JavaScriptで実装された管理ツールが標準で付属しています。ウェブブラ
       ウザでhttp://hostname:port/にアクセスすると、管理ツールを利用できます。

   書式
          groonga-httpd [nginx options]

   使い方
   設定をする
       まずは、データベースを指定するためにgroonga-httpdの設定ファイルを編集する必要がありま
       す。次のように/etc/groonga/httpd/groonga-httpd.confを編集して  groonga_database   ディレク
       ティブを有効にしてます。

          # Match this to the file owner of groonga database files if groonga-httpd is
          # run as root.
          #user groonga;
          ...
          http {
            ...
            # Don't change the location; currently only /d/ is supported.
            location /d/ {
              groonga on; # <= This means to turn on groonga-httpd.

              # Specify an actual database and enable this.
              groonga_database /var/lib/groonga/db/db;
            }
            ...
          }

       次に、groonga-httpdを実行してください。すぐにターミナルに制御が戻ってきます。これ
       はgroonga-httpdはデフォルトでデーモンプロセスになるからです。

          % groonga-httpd

   クエリーを実行する
       動作を確認するため、簡単なクエリー( /reference/commands/status )をリクエストしてみます。

       実行例:

          % curl http://localhost:10041/d/status
          [
            [
              0,
              1337566253.89858,
              0.000355720520019531
            ],
            {
              "uptime": 0,
              "max_command_version": 2,
              "n_queries": 0,
              "cache_hit_rate": 0.0,
              "version": "4.0.1",
              "alloc_count": 161,
              "command_version": 1,
              "starttime": 1395806036,
              "default_command_version": 1
            }
          ]

   POSTでのデータロード
       JSONデータをPOSTするとデータをロードできます。

       Users テーブルに alicebob ユーザーをロードする curl のコマンドライン例は次の通りです:

          % curl --data-binary '[{"_key": "alice"}, {"_key": "bob"}]' -H "Content-Type: application/json" "http://localhost:10041/d/load?table=Users"

       JSONファイルからユーザーをロードする場合は、次のようなJSONファイルを準備します:

          [
          {"_key": "alice"},
          {"_key": "bob"}
          ]

       それから curl のコマンドラインでJSONファイルを指定します:

          % curl -X POST 'http://localhost:10041/d/load?table=Users' -H 'Content-Type: application/json' -d @users.json

   管理ツールを使う
       補足ですが、 http://localhost:10041/ にアクセスすると管理ツールを利用できます。

   終了する
       最後に、次のコマンドで動作中のgroonga-httpdデーモンを終了できます。

          % groonga-httpd -s stop

   設定ディレクティブ
       このセクションでは重要なディレクティブのみ説明します。重要なディレクティブと
       はgroonga-http特有のディレクティブと性能に関するディレクティブです。

       以下のディレクティブはgroonga-httpdの設定ファイル中で使用することができます。デフォルトで
       は、設定ファイルは/etc/groonga/httpd/groonga-httpd.confに置かれています。

   groonga-httpd特有のディレクティブ
       以下のディレクティブはnginxが提供しているものではなく、groonga-httpd関連の設定をするため
       にgroonga-httpdが提供しているディレクティブです。

   groonga
       書式:

          groonga on | off;

       Default
              groonga off;

       Context
              location

       この    location    ブロックでGroongaを使うかどうかを指定します。デフォルトは    off    で
       す。Groongaを使うためには on を指定してください。

       例:

          location /d/ {
            groonga on;  # Enables groonga under /d/... path
          }

          location /d/ {
            groonga off; # Disables groonga under /d/... path
          }

   groonga_database
       書式:

          groonga_database /path/to/groonga/database;

       Default
              groonga_database /usr/local/var/lib/groonga/db/db;

       Context
              http, server, location

       Groongaデータベースのパスを指定します。このディレクティブは必須です。

   groonga_database_auto_create
       書式:

          groonga_database_auto_create on | off;

       Default
              groonga_database_auto_create on;

       Context
              http, server, location

       Groongaのデータベースを自動で作成するかどうかを指定します。もし、この値が      ongroonga_database    に指定したGroongaのデータベースが存在しない場合は自動でGroongaのデータ
       ベースを作成します。Groongaのデータベースが存在している場合は何もしません。

       もし、親ディレクトリが存在しな場合は再帰的に親ディレクトリも作成します。

       デフォルト値は on です。通常、この値を変更する必要はありません。

   groonga_base_path
       書式:

          groonga_base_path /d/;

       Default
              location の名前と同じ値。

       Context
              location

       URIのベースパスを指定します。Groongaは              command               を実行するために
       /d/command?parameter1=value1&... というパスを使います。groonga-httpdでもこのパスの形式を使
       いますが、groonga-httpdは  /other-prefix/command?parameter1=value1&... というように /d/ で
       はなく別のプレフィックスを使った形式もサポートしています。この別の形式もサポートするため
       に、groonga-httpdはリクエストURIの先頭からベースパスを削除し、先頭に /d/  を追加します。こ
       のパスの変換をすることにより、ユーザーはプレフィックスをカスタムできるようになります
       が、Groongaは常に /d/command?parameter1=value1&... という形式で処理できます。

       通常、このディレクティブを使う必要はありません。このディレクティブはコマンド毎に設定をした
       い場合に使います。

       以下は /reference/commands/shutdown コマンドに認証をかける設定例です。:

          groonga_database /var/lib/groonga/db/db;

          location /d/shutdown {
            groonga on;
            # groonga_base_path is needed.
            # Because /d/shutdown is handled as the base path.
            # Without this configuration, /d/shutdown/shutdown path is required
            # to run shutdown command.
            groonga_base_path /d/;
            auth_basic           "manager is required!";
            auth_basic_user_file "/etc/managers.htpasswd";
          }

          location /d/ {
            groonga on;
            # groonga_base_path doesn't needed.
            # Because location name is the base path.
          }

   groonga_log_path
       書式:

          groonga_log_path path | off;

       Default
              /var/log/groonga/httpd/groonga.log

       Context
              http, server, location

       Groongaのログ保存先を  httpserver もしくは location ブロックで指定します。デフォルトは
       /var/log/groonga/httpd/groonga.log です。ログを無効にするには off を指定します。

       例:

          location /d/ {
            groonga on;
            # You can disable log for groonga.
            groonga_log_path off;
          }

   groonga_log_level
       書式:

          groonga_log_level none | emergency | alert | ciritical | error | warning | notice | info | debug | dump;

       Default
              notice

       Context
              http, server, location

       Groongaのログレベルを httpserver もしくは location  ブロックで指定します。デフォルトは
       notice です。 none を指定することでログを無効にできます。

       例:

          location /d/ {
            groonga on;
            # You can customize log level for groonga.
            groonga_log_level notice;
          }

   groonga_query_log_path
       書式:

          groonga_query_log_path path | off;

       Default
              /var/log/groonga/httpd/groonga-query.log

       Context
              http, server, location

       Groongaのクエリーログの保存先を  httpserver もしくは location ブロックで指定します。デ
       フォルトは /var/log/groonga/httpd/groonga-query.log です。ログを無効にするには off  を指定
       します。

       例:

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

       クエリーログは以下のようなケースで有用です:

          · スロークエリーを見つける。

          · デバッグ。

       groonga-query-log  パッケージ でクエリーログを解析できます。このパッケージは有用なツールを
       提供しています。

       例えば、クエリーログを解析するツールがあります。これを使えば、スロークエリーを見つけること
       ができます。クエリーログ内のすべてのクエリーを再生するツールもあります。これを使えば、新し
       いGroongaをプロダクション環境にデプロイする前に網羅的にテストすることができます。

   性能関連のディレクティブ
       以下のディレクティブはgronoga-httpdの性能に関連しているディレクティブです。

   worker_processes
       最適なパフォーマンスを得るためには、CPU数あるいはコア数と同じ数になるようにこのディレク
       ティブを設定してください。大抵の場合、GroongaのクエリーはCPU負荷が高いものとなり、複数
       のCPU/コアを使い切るためには、このディレクティブを設定する必要があります。

       このディレクティブはgroonga-httpdのディレクティブではなく、nginxのディレクティブです。詳細
       は、 http://wiki.nginx.org/CoreModule#worker_processes を参照してください。

       デフォルトで、このディレクティブには1が設定されています。

   groonga_cache_limit
       This directive is introduced to customize cache limit for each worker process.

       書式:

          groonga_cache_limit CACHE_LIMIT;

       Default
              100

       Context
              http, server, location

       Groongaのクエリキャッシュの制限を  httpserver  もしくは  location ブロックで指定しま
       す。デフォルトは 100 です。 0 を指定することで groonga_cache_limit  を明示的に無効にできま
       す。

       例:

          location /d/ {
            groonga on;
            # You can customize query cache limit for groonga.
            groonga_cache_limit 100;
          }

   proxy_cache
       まとめると、Groonga組み込みのクエリーキャッシュ機能の代わりにnginxのリバースプロキシと
       キャッシュの仕組みを使うこともできます。

   クエリーキャッシュ
       groongaは   /reference/commands/select    コマンド用にクエリーキャッシュ機能を提供していま
       す。この機能は多くのケースで性能向上を実現します。

       クエリーキャッシュ機能は   /reference/commands/cache_limit  コマンドを使っていないあるいは
       ワーカー数が1だけの場合はgroonga-httpd上でもきちんと動作します。通常、
       /reference/commands/cache_limit コマンドは使わないので、多くの場合は問題がありません。

       2ワーカー以上で /reference/commands/cache_limit コマンドを使ったときの問題点を説明します。

       groongaのクエリーキャッシュは同じプロセス内で有効です。これは、同じキャッシュを複数のワー
       カー間で共有できないということです。キャッシュサイズを変更しないならこれは大きな問題ではあ
       りません。もし、  /reference/commands/cache_limit コマンドでキャッシュサイズを変更したいな
       ら問題になります。

       すべてのワーカーのキャッシュサイズを変更する汎用的な方法がないのです。

       例えば、3ワーカーいるとします:

                                             +-- worker 1
          client -- groonga-httpd (master) --+-- worker 2
                                             +-- worker 3

       クライアントが /reference/commands/cache_limit コマンドをリクエストし、worker  1が受け取り
       ました:

                                             +-> worker 1 (changed!)
          client -> groonga-httpd (master) --+-- worker 2
                                             +-- worker 3

       クライアントがもう一度  /reference/commands/cache_limit コマンドをリクエストし、またworker
       1が受け取りました:

                                             +-> worker 1 (changed again!!!)
          client -> groonga-httpd (master) --+-- worker 2
                                             +-- worker 3

       この場合、worker 2とworker  3は1つもリクエストを受けとっていません。そのため、これらのワー
       カーのキャッシュサイズは変更されていません。

       クライアントはワーカーを選ぶことができないので、  /reference/commands/cache_limit コマンド
       ですべてのワーカのキャッシュサイズを変更することができないのです。

   リバースプロキシとキャッシュ
       nginxのリバースプロキシ機能とキャッシュ機能を使ってクエリーキャッシュを実現できます:

                                                                      +-- worker 1
          client -- groonga-httpd (master) -- reverse proxy + cache --+-- worker 2
                                                                      +-- worker 3

       この方法ではすべてのワーカーで同じキャッシュの設定をりようできますが、HTTPで動的にキャッ
       シュの設定を変更することはできません。

       以下はサンプルの設定です:

          ...
          http {
            proxy_cache_path /var/cache/groonga-httpd levels=1:2 keys_zone=groonga:10m;
            proxy_cache_valid 10m;
            ...
            # Reverse proxy and cache
            server {
              listen 10041;
              ...
              # Only select command
              location /d/select {
                # Pass through groonga with cache
                proxy_cache groonga;
                proxy_pass http://localhost:20041;
              }

              location / {
                # Pass through groonga
                proxy_pass http://localhost:20041;
              }
            }

            # groonga
            server {
              location 20041;
              location /d/ {
                groonga on;
                groonga_database /var/lib/groonga/db/db;
              }
            }
            ...
          }

       パラメーターの詳細は以下のnginxのドキュメントを見てください:

          · http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path

          · http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_valid

          · http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache

          · http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

       Groongaに新しいデータをロードしたときは自分でnginxが作ったキャッシュファイルを削除しなけれ
       ばいけないことに注意してください。前述のサンプル設定では、以下のコマンドでキャッシュを消せ
       ます:

          % groonga DB_PATH < load.grn
          % rm -rf /var/cache/groonga-httpd/*

       Groongaのクエリーキャッシュ機能を使うと、手動でキャッシュを失効する必要はありません。自動
       で失効します。

   利用可能なnginxモジュール
       全てのHTTPの標準モジュールが利用可能です。PCRE(Perl Compatible Regular  Expressions)がな
       い場合はHttpRewriteModuleは無効になります。標準モジュールの一覧は、
       http://wiki.nginx.org/Modules を参照してください。

   Groonga HTTPサーバー
   名前
       Groonga HTTPサーバー

   書式
          groonga -d --protocol http DB_PATH

   概要
       Groongaサーバを起動する時に --protocol オプションに http  を指定すると、HTTPで通信可能にな
       ります。また、  --document-root によって静的ページのパスを指定すると、HTTPリクエストに指定
       されたURIに対応する、パス配下に置かれたファイルを出力します。

       GroongaにはHTML + JavaScriptで実装された管理ツールが標準で付属しています。 --document-root
       を指定しない場合は管理ツールがインストールされているパスが指定されたとみなされますの
       で、ウェブブラウザで http://HOSTNAME:PORT/ にアクセスすると、管理ツールを利用できます。

   コマンド
       http  を指定して起動したGroongaサーバーに対しても、他のモードで起動したGroongaと同じコマン
       ドが使用できます。

       コマンドは、複数の引数をとります。引数にはそれぞれ名前があります。また、特殊な引数である
       output_typecommand_version があります。

       スタンドアロンやクライアントモードでは、コマンドは以下のような形式で指定します。
          形式1: コマンド名 値1 値2,..

          形式2: コマンド名 --引数名1 値1 --引数名2 値2,..

       形式1と形式2は混在させることができます。これらの形式では、 output_type  という引数名を用い
       て出力形式を指定します。

       HTTPでGroongaサーバーと通信する際には、以下のような形式でコマンドを指定します。:

          Format: /d/COMMAND_NAME.OUTPUT_TYPE?ARGUMENT_NAME1=VALUE1&ARGUMENT_NAME2=VALUE2&...

       ただし、コマンド名、引数名、値はURLエンコードが必要です。

       GETメソッドのみが使用可能です。

       出力形式にはJSON, TSV, XMLが指定可能です。

       command_version                               はコマンドの仕様の互換性を指定します。詳細は
       /reference/command/command_version を参照してください。

   戻り値
       出力形式の指定に従って、コマンドの実行結果を出力します。

   groonga-suggest-create-dataset
   名前
       groonga-suggest-create-dataset - Defines schema for a suggestion dataset

   SYNOPSTIS
          groonga-suggest-create-dataset [options] DATABASE DATASET

   DESCTIPION
       groonga-suggest-create-dataset creates a dataset for /reference/suggest.  A  database  has
       many datasets. This command just defines schema for a suggestion dataset.

       This command generates some tables and columns for /reference/suggest.

       Here  is  the  list  of  such  tables.  If  you specify 'query' as dataset name, following
       '_DATASET'  suffix  are  replaced.  Thus,  'item_query',  'pair_query',  'sequence_query',
       'event_query' tables are generated.

       · event_type

       · bigram

       · kana

       · item_DATASET

       · pair_DATASET

       · sequence_DATASET

       · event_DATASET

       · 設定ディレクティブ

   オプション
       None.

   EXIT STATUS
       TODO

   FILES
       TODO

   
       TODO

   参考
       /reference/suggest groonga-suggest-httpd groonga-suggest-learner

   groonga-suggest-httpd
   概要
       groonga-suggest-httpd  is  a  program  to provide interface which accepts HTTP request and
       returns suggestion dataset, then saves logs for learning.   groonga-suggest-httpd  behaves
       similar  in  point  of  view  of  suggestion  functionality,  but the name of parameter is
       different.

   書式
          groonga-suggest-httpd [options] database_path

   使い方
   設定をする
       最初に提案用のデータベースをセットアップする必要があります。

       実行例:

          % groonga-suggest-create-dataset /tmp/groonga-databases/groonga-suggest-httpd query

   Launch groonga-suggest-httpd
       Execute groonga-suggest-httpd command:

       実行例:

          % groonga-suggest-httpd /tmp/groonga-databases/groonga-suggest-httpd

       After executing above command, groonga-suggest-httpd accepts HTTP request on 8080 port.

       If you just want to save requests into log file, use -l option.

       Here is the example to save log files under logs directory with log prefix for each file.:

          % groonga-suggest-httpd -l logs/log /tmp/groonga-databases/groonga-suggest-httpd

       Under logs directory, log files such as logYYYYmmddHHMMSS-00 are created.

   Request to groonga-suggest-httpd
       Here is the sample requests to learn groonga for query dataset:

          % curl 'http://localhost:8080/?i=127.0.0.1&l=query&s=92619&t=complete&q=g'
          % curl 'http://localhost:8080/?i=127.0.0.1&l=query&s=93850&t=complete&q=gr'
          % curl 'http://localhost:8080/?i=127.0.0.1&l=query&s=94293&t=complete&q=gro'
          % curl 'http://localhost:8080/?i=127.0.0.1&l=query&s=94734&t=complete&q=groo'
          % curl 'http://localhost:8080/?i=127.0.0.1&l=query&s=95147&t=complete&q=grooon'
          % curl 'http://localhost:8080/?i=127.0.0.1&l=query&s=95553&t=complete&q=groonga'
          % curl 'http://localhost:8080/?i=127.0.0.1&l=query&s=95959&t=submit&q=groonga

   Options
       -p, --port
              Specify http server port number. The default value is 8080.

       -t, --n-threads
              Specify number of threads. The default value is 8.  This option accepts 128 as  the
              max value, but use the number of CPU cores for performance.

       -s, --send-endpoint
              Specify endpoint for sender.

       -r, --receive-endpoint
              Specify endpoint for receiver.

       -l, --log-base-path
              Specify path prefix of log.

       --n-lines-per-log-file
              Specify the number of lines in a log file. The default value is 1,000,000.

       -d, --daemon
              Specify this option to daemonize.

       --disable-max-fd-check
              Specify this option to disable checking max fd on start.

   コマンドライン引数
       database_path だけが必須の引数です。

   database_path
       Specifies   the   path   to   a  Groonga  database.  This  database  must  be  created  by
       groonga-suggest-create-dataset command because it  executes  required  initialization  for
       suggestion.

   GETの引数
       groonga-suggest-httpd accepts following GET parameters.

       必須の引数があります。どれが必須かはクエリーの種類に依存します。

   必須引数
                                ┌─────┬──────────────────────────┬──────┐
                                │キー │ 説明                     │ Note │
                                ├─────┼──────────────────────────┼──────┤
                                │q    │ UTF-8   encoded   string │      │
                                │     │ which user fills in form │      │
                                ├─────┼──────────────────────────┼──────┤
                                │t    │ The type of  query.  The │      │
                                │     │ value  of  type  must be │      │
                                │     │ complete,       correct, │      │
                                │     │ suggest  or  submit.  It │      │
                                │     │ also  accepts   multiple │      │
                                │     │ type  of  query which is │      │
                                │     │ concatinated by |.  Note │      │
                                │     │ that  submit  is invalid │      │
                                │     │ value when  you  specify │      │
                                │     │ multiple type of query.  │      │
                                └─────┴──────────────────────────┴──────┘

   学習時に必須の引数
                      ┌─────┬──────────────────────────┬──────────────────────────┐
                      │キー │ 説明                     │ Note                     │
                      ├─────┼──────────────────────────┼──────────────────────────┤
                      │s    │ Elapsed  time  from 0:00 │ Note   that   you   need │
                      │     │ January 1, 1970          │ specify  the  value of s │
                      │     │                          │ in milliseconds          │
                      ├─────┼──────────────────────────┼──────────────────────────┤
                      │i    │ Unique  ID  to  distinct │ Use  session  ID  or  IP │
                      │     │ user                     │ address for example      │
                      ├─────┼──────────────────────────┼──────────────────────────┤
                      │l    │ Specify  the   name   of │ Note that  dataset  name │
                      │     │ dataset for learning. It │ must   be   matched   to │
                      │     │ also  accepts   multiple │ following        regular │
                      │     │ dataset  name  which  is │ expression       [A-Za-z │
                      │     │ concatinated by |][A-Za-z0-9 ]{0,15}      │
                      └─────┴──────────────────────────┴──────────────────────────┘

   提案時に必須の引数
                      ┌─────┬──────────────────────────┬──────────────────────────┐
                      │キー │ 説明                     │ Note                     │
                      ├─────┼──────────────────────────┼──────────────────────────┤
                      │n    │ 提案用のデータベース名を │ This   dataset  name  is │
                      │     │ 指定します。             │ used    to     calculate │
                      │     │                          │ suggestion results       │
                      └─────┴──────────────────────────┴──────────────────────────┘

   省略可能引数
                    ┌─────────┬──────────────────────────┬──────────────────────────┐
                    │キー     │ 説明                     │ Note                     │
                    ├─────────┼──────────────────────────┼──────────────────────────┤
                    │callback │ Specify   the   name  of │ The   name  of  function │
                    │         │ function if  you  prefer │ must   be   matched   to │
                    │         │ JSONP as response format │ reqular       expression │
                    │         │                          │ [A-Za-z      ][A-Za-z0-9 │
                    │         │                          │ ]{0,15}                  │
                    └─────────┴──────────────────────────┴──────────────────────────┘

   戻り値
       groonga-suggest-httpd command returns following response in JSON or JSONP format.

       JSON形式:

          {TYPE: [[CANDIDATE_1, SCORE_1], [CANDIDATE_2, SCORE_2], ... [CANDIDATE_N, SCORE_N]]}

       JSONP形式:

          FUNCTION({TYPE: [[CANDIDATE_1, SCORE_1], [CANDIDATE_2, SCORE_2], ... [CANDIDATE_N, SCORE_N]]})

       TYPE
          completecorrectsuggest のどれか。

       CANDIDATE_N
          The string of candidate (UTF-8).

       SCORE_N
          スコア。

   groonga-suggest-learner
   概要
       groonga-suggest-learner  is a program to learn suggest result from data which derived from
       groonga-suggest-httpd.  Usually, it is used with groonga-suggest-httpd, but It is  allowed
       to  launch  standalone.   In  such  a  case,  groonga-suggest-learner  loads data from log
       directory.

   書式
          groonga-suggest-learner [options] database_path

   使い方
       groonga-suggest-leaner supports the two way of learning data.  One is learning  data  from
       groonga-suggest-httpd, the other is learning data from already existing log files.

   Learning data from groonga-suggest-httpd
       Execute groonga-suggest-learner.:

          groonga-suggest-learner testdb/db

   Learning data from log files
       Execute groonga-suggest-learner with -l option.

       Here is the sample to load log data under logs directory:

          groonga-suggest-learner -l logs testdb/db

   Options
       -r <endpoint>, --receive-endpoint <endpoint>
              Uses <endpoint> as the receiver endpoint.

       -s <endpoint>, --send-endpoint <endpoint>
              Uses <endpoint> as the sender endpoint.

       -d, --daemon
              Runs as a daemon.

       -l <directory>, --log-base-path <directory>
              Reads logs from <directory>.

       --log-path <path>
              Outputs log to <path>.

       --log-level <level>
              Uses  <level> for log level. <level> must be between 1 and 9.  Larger level outputs
              more logs.

   引数
       database_path だけが必須の引数です。

   database_path
       groongaデータベースのパスを指定します。

   関連するテーブル
       Here is the list of table which learned data is stored. If you specify  query  as  dataset
       name, following _DATASET suffix are replaced. Thus, event_query table is used.

       · event_DATASET

   出力
       Groongaは以下の出力形式をサポートしています。

          · JSON

          · XML

          · TSV(タブ区切り形式)

          · MessagePack

       JSONがデフォルトの出力形式です。

   使い方
       Groongaには以下のクエリーインターフェイスがあります。

          · コマンドライン

          · HTTP

       それぞれのインターフェイスで出力形式を変更する方法は異なります。

   コマンドライン
       groonga DB_PATH または groonga -c でコマンドラインクエリーインターフェイスを使うことができ
       ます。これらのgroongaコマンドでは > というプロンプトが表示されます。クエリーインターフェイ
       スでは output_type オプションで出力形式を指定できます。

       output_type オプションを指定しない場合はJSON形式の出力になります:

          > status
          [[0,1327721628.10738,0.000131845474243164],{"alloc_count":142,"starttime":1327721626,"uptime":2,"version":"1.2.9-92-gb87d9f8","n_queries":0,"cache_hit_rate":0.0,"command_version":1,"default_command_version":1,"max_command_version":2}]

       明示的に output_typejson を指定することもできます。この場合はJSON形式の出力になります:

          > status --output_type json
          [[0,1327721639.08321,7.93933868408203e-05],{"alloc_count":144,"starttime":1327721626,"uptime":13,"version":"1.2.9-92-gb87d9f8","n_queries":0,"cache_hit_rate":0.0,"command_version":1,"default_command_version":1,"max_command_version":2}]

       XML形式の出力にする場合は output_typexml を指定します:

          > status --output_type xml
          <?xml version="1.0" encoding="utf-8"?>
          <RESULT CODE="0" UP="1327721649.61095" ELAPSED="0.000126361846923828">
          <RESULT>
          <TEXT>alloc_count</TEXT>
          <INT>146</INT>
          <TEXT>starttime</TEXT>
          <INT>1327721626</INT>
          <TEXT>uptime</TEXT>
          <INT>23</INT>
          <TEXT>version</TEXT>
          <TEXT>1.2.9-92-gb87d9f8</TEXT>
          <TEXT>n_queries</TEXT>
          <INT>0</INT>
          <TEXT>cache_hit_rate</TEXT>
          <FLOAT>0.0</FLOAT>
          <TEXT>command_version</TEXT>
          <INT>1</INT>
          <TEXT>default_command_version</TEXT>
          <INT>1</INT>
          <TEXT>max_command_version</TEXT>
          <INT>2</INT></RESULT>
          </RESULT>

       TSV形式の出力にする場合は output_typetsv を指定します::<

          > status --output_type tsv
          0     1327721664.82675        0.000113964080810547
          "alloc_count" 146
          "starttime"   1327721626
          "uptime"      38
          "version"     "1.2.9-92-gb87d9f8"
          "n_queries"   0
          "cache_hit_rate"      0.0
          "command_version"     1
          "default_command_version"     1
          "max_command_version" 2
          END

       MessagePack形式の出力にする場合は output_typemsgpack を指定します::<

          > status --output_type msgpack
          (... omitted because MessagePack is binary data format. ...)

   HTTP
       groonga   --protocol   http  -s  DB_PATH  でHTTPクエリーインターフェイスを使うことができま
       す。groonga  HTTPサーバーはデフォルトで10041番ポートで起動します。このクエリーインターフェ
       イスでは拡張子で出力形式を指定します。

       拡張子を指定しない場合はJSON形式の出力になります:

          % curl http://localhost:10041/d/status
          [[0,1327809294.54311,0.00082087516784668],{"alloc_count":155,"starttime":1327809282,"uptime":12,"version":"1.2.9-92-gb87d9f8","n_queries":0,"cache_hit_rate":0.0,"command_version":1,"default_command_version":1,"max_command_version":2}]

       明示的に json 拡張子を指定することもできます。この場合はJSON形式の出力になります:

          % curl http://localhost:10041/d/status.json
          [[0,1327809319.01929,9.5367431640625e-05],{"alloc_count":157,"starttime":1327809282,"uptime":37,"version":"1.2.9-92-gb87d9f8","n_queries":0,"cache_hit_rate":0.0,"command_version":1,"default_command_version":1,"max_command_version":2}]

       XML形式の出力にする場合は xml 拡張子を指定します:

          % curl http://localhost:10041/d/status.xml
          <?xml version="1.0" encoding="utf-8"?>
          <RESULT CODE="0" UP="1327809339.5782" ELAPSED="9.56058502197266e-05">
          <RESULT>
          <TEXT>alloc_count</TEXT>
          <INT>159</INT>
          <TEXT>starttime</TEXT>
          <INT>1327809282</INT>
          <TEXT>uptime</TEXT>
          <INT>57</INT>
          <TEXT>version</TEXT>
          <TEXT>1.2.9-92-gb87d9f8</TEXT>
          <TEXT>n_queries</TEXT>
          <INT>0</INT>
          <TEXT>cache_hit_rate</TEXT>
          <FLOAT>0.0</FLOAT>
          <TEXT>command_version</TEXT>
          <INT>1</INT>
          <TEXT>default_command_version</TEXT>
          <INT>1</INT>
          <TEXT>max_command_version</TEXT>
          <INT>2</INT></RESULT>
          </RESULT>

       TSV形式の出力にする場合は tsv 拡張子を指定します:

          % curl http://localhost:10041/d/status.tsv
          0     1327809366.84187        8.44001770019531e-05
          "alloc_count" 159
          "starttime"   1327809282
          "uptime"      84
          "version"     "1.2.9-92-gb87d9f8"
          "n_queries"   0
          "cache_hit_rate"      0.0
          "command_version"     1
          "default_command_version"     1
          "max_command_version" 2
          END

       MessagePack形式の出力にする場合は msgpack 拡張子を指定します:

          % curl http://localhost:10041/d/status.msgpack
          (... omitted because MessagePack is binary data format. ...)

   コマンド
       コマンドはクエリーAPIでもっとも重要な処理単位です。コマンドでGroongaに処理をリクエストしま
       す。

       このセクションではコマンドについての説明と組み込みのコマンドについて説明します。

   コマンドバージョン
   概要
       Groonga1.1からコマンドバージョンという概念が導入されます。コマンドバージョン
       は、selectやloadなどのGroongaのコマンドの仕様の互換性を表します。Groongaパッケージのバー
       ジョンが新しくなったとしても、同一のコマンドバージョンが使用可能であるなら、すべてのコマン
       ドについて互換性が保証されます。コマンドバージョンが異なれば、同じ名前のコマンドであって
       も、動作に互換性がない可能性があります。

       あるバージョンのGroongaは、二つのコマンドバージョンを同時にサポートするようになります。 使
       用するコマンドバージョンは、groongaを起動する際のコマンドラインオプションないしコンフィグ
       ファイルにdefault-commnad-versionパラメータを与えることによって指定できます。また、個々の
       コマンドを実行する際に、command_versionパラメータを与えることによっても指定することができ
       ます。

       コマンドバージョンは1からはじまり、更新されるたびに1ずつ大きくなります。現状のGroongaのコ
       マンドの仕様はcommand-version                            1という扱いになります。次回提供す
       るGroongaは、command-version 1とcommand-version 2の二つをサポートすることになります。

   バージョンの位置づけ
       あるバージョンのGroongaにおいてサポートされるコマンドバージョンは、develop,
       stable,deprecatedのいずれかの位置づけとなります。

       develop
              まだ開発中であり、仕様が変更される可能性があります。

       stable 使用可能であり仕様も安定しています。その時点で使用することが推奨されます。

       deprecated
              使用可能であり仕様も安定していますが、廃止予定であり使用が推奨されません。

       あるバージョンのGroongaがサポートする二つのコマンドバージョンのうち、いずれか一つが必
       ずstableの位置づけとなります。残りの一つは、developないしdeprecatedとなります。

       たとえば下記のようにGroongaのサポートするコマンドバージョンは推移します。:

          groonga1.1: command-version1=stable     command-version2=develop
          groonga1.2: command-version1=deprecated command-version2=stable
          groonga1.3: command-version2=stable     command-version3=develop
          groonga1.4: command-version2=deprecated command-version3=stable
          groonga1.5: command-version3=stable     command-version4=develop

       あるコマンドバージョンははじめにdevelop扱いとしてリリースされ、やがてstableに移行します。
       その後二世代経過するとそのコマンドバージョンはdeprecated扱いとなります。さらに次のコマンド
       バージョンがリリースされると、deprecatedだったコマンドバージョンはサポート対象外となりま
       す。

       default-commnad-versionパラメータやcommand_versionパラメータを指定せずにgroongaコマンドを
       実行した際には、その時点でstableであるコマンドバージョンが指定されたものとみなします。

       groongaプロセス起動時に、default-command-versionパラメータにstable扱いでないコマンドバー
       ジョンを指定した場合には、警告メッセージがログファイルに出力されます。また、サポート範囲外
       のコマンドバージョンを指定した場合にはエラーとなり、プロセスは速やかに停止します。

   コマンドバージョンの指定方法
       コマンドバージョンの指定方法はgroonga実行モジュールの引数として指定する方法と各コマンドの
       引数として指定する方法があります。

   default-command-versionパラメータ
       groonga実行モジュールの引数としてdefault-command-versionパラメータを指定できます。
       (configファイルの中に指定することも可能です)

       実行例:

          groonga --default-command-version 1

       そのプロセスで実行するすべてのコマンドについて、デフォルトのコマンドバージョンとして指定さ
       れたバージョンを使用します。指定されたコマンドバージョンがstableであった場合にはなんのメッ
       セージも表示されずそのまま起動します。指定されたコマンドバージョンがdevelopあるい
       はdeprecatedであった場合には、groonga.logファイルに警告メッセージを出力します。指定された
       コマンドバージョンがサポート対象外であった場合には標準エラー出力にエラーメッセージを出力
       し、プロセスは速やかに終了します。

   command_versionパラメータ
       select,loadなどのすべてのgroongaコマンドにcommand_versionが指定できます。

       実行例:

          select --command_version 1 --table tablename

       指定されたコマンドバージョンでコマンドを実行します。指定されたコマンドバージョンがサポート
       対象外であった場合にはエラーが返されます。command-versionが指定されなかった場合は、当該プ
       ロセス起動時にdefault-command-versionに指定した値が指定されたものとみなします。

   出力形式
   概要
       コマンドは実行結果をJSONまたはMessagePack、XML、TSVのどれかで出力します。

       JSONとMessagePackの出力は同じ構造になっています。XMLとTSVはそれぞれ独自の構造になっていま
       す。

       JSONまたはMessagePackの利用を推奨します。XMLは目視で結果を確認する時に便利です。TSVは特殊
       な用途では有用です。通常はTSVを使う必要はありません。

   JSONとMessagePack
       このセクションではJSONとMessagePack形式を使った時のコマンド実行結果の構造を説明しま
       す。MessagePackはバイナリー形式なのでここでは構造を示すためにJSONを使います。バイナリー形
       式はドキュメントには向いていません。

       JSON形式、MessagePack形式のときは以下のような構造になります:

          [HEADER, BODY]

       実行例:

          [
            [
              0,
              1337566253.89858,
              0.000355720520019531
            ],
            [
              [
                [
                  1
                ],
                [
                  [
                    "_id",
                    "UInt32"
                  ],
                  [
                    "_key",
                    "ShortText"
                  ],
                  [
                    "content",
                    "Text"
                  ],
                  [
                    "n_likes",
                    "UInt32"
                  ]
                ],
                [
                  2,
                  "Groonga",
                  "I started to use groonga. It's very fast!",
                  10
                ]
              ]
            ]
          ]

       この例では、以下の部分が HEADER に相当します:

          [
            0,
            1337566253.89858,
            0.000355720520019531
          ]

       BODY に相当する部分は以下です:

          [
            [
              [
                1
              ],
              [
                [
                  "_id",
                  "UInt32"
                ],
                [
                  "_key",
                  "ShortText"
                ],
                [
                  "content",
                  "Text"
                ],
                [
                  "n_likes",
                  "UInt32"
                ]
              ],
              [
                2,
                "Groonga",
                "I started to use groonga. It's very fast!",
                10
              ]
            ]
          ]

   HEADER
       HEADER は配列です。 HEADER の内容にはいくつかのパターンがあります。

   成功した場合
       コマンドが成功した場合は HEADER には3つの要素があります:

          [0, UNIX_TIME_WHEN_COMMAND_IS_STARTED, ELAPSED_TIME]

       最初の値は常に 0 です。

       UNIX_TIME_WHEN_COMMAND_IS_STARTED           はコマンドの実行が始まったときの時刻です。時刻
       は1970-01-01 00:00:00から経過した秒数で表現されています。 ELAPSED_TIME  はコマンドの実行に
       かかった時間です。単位は秒です。  UNIX_TIME_WHEN_COMMAND_IS_STARTEDELAPSED_TIME も浮動
       小数点数です。小数部分はナノ秒を表します。

   エラーの場合
       エラーの場合、 HEADER には4個または5個の要素があります:

          [
            RETURN_CODE,
            UNIX_TIME_WHEN_COMMAND_IS_STARTED,
            ELAPSED_TIME,
            ERROR_MESSAGE,
            ERROR_LOCATION
          ]

       ERROR_LOCATIONHEADER には含まれないかもしれませんが、他の4個の要素は常に含まれます。

       RETURN_CODE は0ではない値です。リターンコードの詳細は return_code を見てください。

       UNIX_TIME_WHEN_COMMAND_IS_STARTEDELAPSED_TIME は成功した時と同じです。

       ERROR_MESSAGE はエラーメッセージです。文字列です。

       ERROR_LOCATION  は存在しないことがあります。もし、エラーが発生した場所の情報を収集できてい
       た場合は  ERROR_LOCATION が含まれます。 ERROR_LOCATION は配列です。 ERROR_LOCATION は1個ま
       たは2個の要素を含みます:

          [
            LOCATION_IN_GROONGA,
            LOCATION_IN_INPUT
          ]

       LOCATION_IN_GROONGA          はGroonga内でエラーが発生したソースコードの場所です。この情報
       はGroonga開発者には役に立ちますが、ユーザーの役には立ちません。 LOCATION_IN_GROONGA は配列
       です。 LOCATION_IN_GROONGA には3個の要素があります:

          [
            FUNCTION_NAME,
            SOURCE_FILE_NAME,
            LINE_NUMBER
          ]

       FUNCTION_NAME はエラーが発生した関数の名前です。

       SOURCE_FILE_NAME はエラーが発生した箇所を含んだGroongaのソースコードのファイル名です。

       LINE_NUMBER はエラーが発生した箇所の SOURCE_FILE_NAME での行番号です。

       LOCATION_IN_INPUT は存在しないことがあります。 LOCATION_IN_INPUT  は入力ファイルでエラーが
       発生した場所の情報を収集できたときに含まれます。入力ファイルは  groonga コマンドのコマンド
       ラインオプション     --file     で指定できます。     LOCATION_IN_GROONGA      は配列です。
       LOCATION_IN_GROONGA には3個の要素があります:

          [
            INPUT_FILE_NAME,
            LINE_NUMBER,
            LINE_CONTENT
          ]

       INPUT_FILE_NAME はエラーが発生した入力ファイルのファイル名です。

       LINE_NUMBER はエラーが発生した箇所の INPUT_FILE_NAME での行番号です。

       LINE_CONTENTINPUT_FILE_NAME 内の LINE_NUMBER 行目の内容です。

   BODY
       BODY の内容は実行したコマンドに依存します。 BODY がないこともあります。

       エラーが発生した時に、 BODY にエラーメッセージが入っていることもあります。

   XML
       TODO

   TSV
       TODO

   参考
       · return_code はリターンコードについて説明しています。

   プリティープリント
   概要
       バージョン 5.1.0 で追加.

       Groongaでは   output_format   にJSONを選んだときはプリティープリント(読みやすく整形して出
       力)できます。

   使い方
       output_pretty パラメーターに yes を指定するだけです。:

          > status --output_pretty yes
          [
            [
              0,
              1448344438.43783,
              5.29289245605469e-05
            ],
            {
              "alloc_count": 233,
              "starttime": 1448344437,
              "start_time": 1448344437,
              "uptime": 1,
              "version": "5.0.9-135-g0763d91",
              "n_queries": 0,
              "cache_hit_rate": 0.0,
              "command_version": 1,
              "default_command_version": 1,
              "max_command_version": 2
            }
          ]

       以下は output_pretty パラメーターを指定しなかったときの結果です。:

          > status
          [[0,1448344438.43783,5.29289245605469e-05],{"alloc_count":233,"starttime":1448344437,...}]

   リクエストID
   概要
       バージョン 4.0.9 で追加.

       各リクエストにIDを割り当てることができます。

       リクエストをキャンセルするためにこのIDを使うことができます。リクエストをキャンセルする方法
       の詳細は /reference/commands/request_cancel を参照してください。

       リクエストIDはユーザーが管理します。もし、実行中の複数のリクエストに同じIDを割り当てるとそ
       のリクエストはキャンセルできません。

       もっとも単純なIDの付け方は 1, 2, .. というように数値をインクリメントしていく付け方です。

       リクエストIDは文字列です。リクエストIDの最長サイズは4096バイトです。

   リクエストにIDを割り当てる方法
       すべてのコマンドは request_id パラメーターを受け付けます。 request_id パラメーターを追加す
       ることでリクエストにIDを割り当てることができます。

       以下は id-1 というIDをリクエストに割り当てる例です:

          select Users --request_id id-1

   参考
       · /reference/commands/request_cancel

   リターンコード
   概要
       リターンコードは処理が成功したかどうかを示すために使われます。もし、処理が成功していなけれ
       ばリターンコードはエラーの種類を示します。

       リターンコードはCのAPIでもクエリーAPIでも使われます。CのAPIでは  grn_ctx_t::rc  でリターン
       コードを確認できます。クエリーAPIではヘッダー要素を見るとリターンコードを確認できます。ク
       エリーAPIでのヘッダー要素については output_format を参照してください。

   一覧
       以下はリターンコードの一覧です。 GRN_SUCCESS (= 0)  は処理が成功したことを示しています。負
       の値のリターンコードはエラーの種類を表しています。  GRN_END_OF_DATA は特別なリターンコード
       です。このリターンコードはCのAPIでだけ使われていて、クエリーAPIにはでてきません。

       · 0: GRN_SUCCESS

       · 1: GRN_END_OF_DATA

       · -1: GRN_UNKNOWN_ERROR

       · -2: GRN_OPERATION_NOT_PERMITTED

       · -3: GRN_NO_SUCH_FILE_OR_DIRECTORY

       · -4: GRN_NO_SUCH_PROCESS

       · -5: GRN_INTERRUPTED_FUNCTION_CALL

       · -6: GRN_INPUT_OUTPUT_ERROR

       · -7: GRN_NO_SUCH_DEVICE_OR_ADDRESS

       · -8: GRN_ARG_LIST_TOO_LONG

       · -9: GRN_EXEC_FORMAT_ERROR

       · -10: GRN_BAD_FILE_DESCRIPTOR

       · -11: GRN_NO_CHILD_PROCESSES

       · -12: GRN_RESOURCE_TEMPORARILY_UNAVAILABLE

       · -13: GRN_NOT_ENOUGH_SPACE

       · -14: GRN_PERMISSION_DENIED

       · -15: GRN_BAD_ADDRESS

       · -16: GRN_RESOURCE_BUSY

       · -17: GRN_FILE_EXISTS

       · -18: GRN_IMPROPER_LINK

       · -19: GRN_NO_SUCH_DEVICE

       · -20: GRN_NOT_A_DIRECTORY

       · -21: GRN_IS_A_DIRECTORY

       · -22: GRN_INVALID_ARGUMENT

       · -23: GRN_TOO_MANY_OPEN_FILES_IN_SYSTEM

       · -24: GRN_TOO_MANY_OPEN_FILES

       · -25: GRN_INAPPROPRIATE_I_O_CONTROL_OPERATION

       · -26: GRN_FILE_TOO_LARGE

       · -27: GRN_NO_SPACE_LEFT_ON_DEVICE

       · -28: GRN_INVALID_SEEK

       · -29: GRN_READ_ONLY_FILE_SYSTEM

       · -30: GRN_TOO_MANY_LINKS

       · -31: GRN_BROKEN_PIPE

       · -32: GRN_DOMAIN_ERROR

       · -33: GRN_RESULT_TOO_LARGE

       · -34: GRN_RESOURCE_DEADLOCK_AVOIDED

       · -35: GRN_NO_MEMORY_AVAILABLE

       · -36: GRN_FILENAME_TOO_LONG

       · -37: GRN_NO_LOCKS_AVAILABLE

       · -38: GRN_FUNCTION_NOT_IMPLEMENTED

       · -39: GRN_DIRECTORY_NOT_EMPTY

       · -40: GRN_ILLEGAL_BYTE_SEQUENCE

       · -41: GRN_SOCKET_NOT_INITIALIZED

       · -42: GRN_OPERATION_WOULD_BLOCK

       · -43: GRN_ADDRESS_IS_NOT_AVAILABLE

       · -44: GRN_NETWORK_IS_DOWN

       · -45: GRN_NO_BUFFER

       · -46: GRN_SOCKET_IS_ALREADY_CONNECTED

       · -47: GRN_SOCKET_IS_NOT_CONNECTED

       · -48: GRN_SOCKET_IS_ALREADY_SHUTDOWNED

       · -49: GRN_OPERATION_TIMEOUT

       · -50: GRN_CONNECTION_REFUSED

       · -51: GRN_RANGE_ERROR

       · -52: GRN_TOKENIZER_ERROR

       · -53: GRN_FILE_CORRUPT

       · -54: GRN_INVALID_FORMAT

       · -55: GRN_OBJECT_CORRUPT

       · -56: GRN_TOO_MANY_SYMBOLIC_LINKS

       · -57: GRN_NOT_SOCKET

       · -58: GRN_OPERATION_NOT_SUPPORTED

       · -59: GRN_ADDRESS_IS_IN_USE

       · -60: GRN_ZLIB_ERROR

       · -61: GRN_LZO_ERROR

       · -62: GRN_STACK_OVER_FLOW

       · -63: GRN_SYNTAX_ERROR

       · -64: GRN_RETRY_MAX

       · -65: GRN_INCOMPATIBLE_FILE_FORMAT

       · -66: GRN_UPDATE_NOT_ALLOWED

       · -67: GRN_TOO_SMALL_OFFSET

       · -68: GRN_TOO_LARGE_OFFSET

       · -69: GRN_TOO_SMALL_LIMIT

       · -70: GRN_CAS_ERROR

       · -71: GRN_UNSUPPORTED_COMMAND_VERSION

   参考
       · output_format  はクエリーAPIでのレスポンスの中でどこにリターンコードがあるかを説明してい
         ます。

       · /spec/gqtp:   GQTPプロトコルもステータスとしてリターンコードを使っていますが、ステータス
         は2バイトの符号なし整数です。そのため、GQTPプロトコルでは、負の値のリターンコードは正の
         値のステータスになります。GQTPプロトコルのステータスの値を2バイトの符号付き整数として扱
         うとステータスをリターンコードに変換できます。

   cache_limit
   概要
       cache_limit   は最大クエリーキャッシュエントリー数を取得・設定します。クエリーキャッシュを
       使っているのは select コマンドだけです。

       最大クエリーキャッシュエントリー数が100の場合は、最新の100 select コマンドの結果だけキャッ
       シュします。キャッシュを失効するアルゴリズムはLRU(Least Recently Used)です。

   構文
       このコマンドの引数は1つで省略できます:

          cache_limit [max=null]

   使い方
       引数なしで cache_limit を実行すると現在の最大キャッシュエントリー数を取得できます。

       実行例:

          cache_limit
          # [[0, 1337566253.89858, 0.000355720520019531], 100]

       max 引数つきで cache_limit を実行すると最大キャッシュエントリー数を設定できます。

       次の例は最大キャッシュエントリー数を 10 に設定する例です。

       実行例:

          cache_limit 10
          # [[0, 1337566253.89858, 0.000355720520019531], 100]
          cache_limit
          # [[0, 1337566253.89858, 0.000355720520019531], 10]

       max 引数を使うと、指定した値に設定される前の最大キャッシュエントリー数が戻り値になります。

   引数
       このセクションではすべての引数について説明します。

   max
       数値で最大クエリーキャッシュエントリー数を指定します。

       max 引数が指定されていない場合は、現在の最大クエリーキャッシュエントリー数は変わりません。
       cache_limit は単に現在の最大クエリーキャッシュエントリー数を返します。

   戻り値
       cache_limit は現在の最大クエリーキャッシュエントリー数を返します:

          [HEADER, N_ENTRIES]

       HEADER
          HEADER については /reference/command/output_format を参照してください。

       N_ENTRIES
          N_ENTRIES は現在の最大クエリーキャッシュエントリー数です。これは数値です。

   参考
       · select

   check
   概要
       check - オブジェクトの状態表示

       Groonga組込コマンドの一つであるcheckについて説明します。組込コマンドは、groonga実行ファイ
       ルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実
       行します。

       checkコマンドは、groongaプロセス内の指定したオブジェクトの状態を表示します。主にデータベー
       スが壊れた場合など異常時の問題解決のために使用することを想定しています。デバッグ用のた
       め、返値のフォーマットが安定しているということは保証されません。(フォーマットが変更される
       可能性が高い)

   構文
          check obj

   使い方
       テーブルTermsのインデックスカラムnameの状態を表示します。:

          check Terms.name
          [{"flags":"00008202",
            "max sid":1,
            "number of garbage segments":0,
            "number of array segments":1,
            "max id of array segment":1,
            "number of buffer segments":110,
            "max id of buffer segment":111,
            "max id of physical segment in use":111,
            "number of unmanaged segments":4294967185,
            "total chunk size":7470239,
            "max id of chunk segments in use":127,
            "number of garbage chunk":[0,0,0,0,0,0,0,0,2,2,0,0,0,0,0]},
           {"buffer id":0,
            "chunk size":94392,
            "buffer term":["596","59777","6",...],
            "buffer free":152944,
            "size in buffer":7361,
            "nterms":237,
            "nterms with chunk":216,
            "buffer id":1,
            "chunk size":71236,
            "buffer term":[["に述",18149,18149,2,25,6,6],
                           ["に追",4505,4505,76,485,136,174],
                           ["に退",26568,26568,2,9,2,2],
                           ...],
            "buffer free":120000,
            "size in buffer":11155,
            "nterms":121,
            "nterms with chunk":116},
            {"buffer id":1,
             ...},
            ...]

   引数
       obj
          状態を表示するオブジェクトの名前を指定します。

   戻り値
       チェックするオブジェクトにより返される値が変わります。

       インデックスカラムの場合:

          下記のような配列が出力されます。

            [インデックスの状態, バッファの状態1, バッファの状態2, ...]

       インデックスの状態 には下記の項目がハッシュ形式で出力されます。
          flags
              指定されているフラグ値です。16進数で表現されています。

          max sid
              セグメントのうち最も大きなIDです。

          number of garbage segments
              ゴミセグメントの数です。

          number of array segments
              配列セグメントの数です。

          max id of array segment
              配列セグメントのうち最も大きなIDです。

          number of buffer segments
              バッファセグメントの数です。

          max id of buffer segment
              バッファセグメントのうち最も大きなIDです。

          max id of physical segment in use
              使用中の論理セグメントのうち最も大きなIDです。

          number of unmanaged segments
              管理されていないセグメントの数です。

          total chunk size
              チャンクサイズの合計です。

          max id of chunk segments in use
              使用中のチャンクセグメントのうち最も大きなIDです。

          number of garbage chunk
              各チャンク毎のゴミの数です。

       バッファの状態 には下記の項目がハッシュ形式で出力されます。
          buffer id
              バッファIDです。

          chunk size
              チャンクのサイズです。

          buffer term
              バッファ内にある語の一覧です。各語の状態は以下のような配列となっています。
                 [語, バッファに登録されている語のID, 用語集に登録されている語のID,  バッファ内で
                 のサイズ, チャンク内でのサイズ]

          buffer free
              バッファの空き容量です。

          size in buffer
              バッファの使用量です。

          nterms
              バッファ内にある語の数です。

          nterms with chunk
              バッファ内にある語のうち、チャンクを使っている語の数です。

   clearlock
   概要
       バージョン 4.0.9 で撤廃: Use lock_clear instead.

       clearlock - オブジェクトにセットされたロックを解除する

       Groonga組込コマンドの一つであるclearlockについて説明します。組込コマンドは、groonga実行
       ファイルの引数、標準>入力、またはソケット経由でgroongaサーバにリクエストを送信することに
       よって実行します。

       clearlockは、対象となるオブジェクト(データベース,テーブル,インデックス等)を指定し、オブ
       ジェクトにかけられた>ロックを再帰的に解除します。

   構文
          clearlock objname

   使い方
       開いているデータベースのロックをすべて解除する:

          clearlock
          [true]

       テーブル名 Entry のカラム body のロックを解除する:

          clearlock Entry.body
          [true]

   引数
       objname
          対象となるオブジェクト名を指定します。空の場合、開いているdbオブジェクトが対象となりま
          す。

   戻り値
          [成功かどうかのフラグ]

       成功かどうかのフラグ
          エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。

   参考
       load

   column_copy
   概要
       バージョン 5.0.7 で追加.

       column_copy はカラムのすべての値を他のカラムにコピーします。

       このコマンドを使うと、次のような機能を実装できます。

          · カラムの設定を変更

          · テーブルの設定を変更

       次のステップでカラムの設定を変更できます。

          1. 新しい設定で新しいカラムを作る

          2. 現在のカラムから新しいカラムへすべての値をコピーする

          3. 現在のカラムを削除する

          4. 新しいカラムを現在のカラムにリネームする

       次のステップでテーブルの設定を変更できます。

          1. 新しい設定で新しいテーブルを作る

          2. すべてのカラムを同じ設定で新しいテーブルに作る

          3. 現在のテーブルから新しいテーブルへすべてのカラムの値をコピーする

          4. 現在のテーブルを削除する

          5. 新しいテーブルを現在のテーブルにリネームする

       具体例は後で示します。

       TABLE_NO_KEY  テーブルから他のテーブルにカラムの値をコピーすることはできません。また、他の
       テーブルから TABLE_NO_KEY テーブルにカラムの値をコピーすることもできません。これは、レコー
       ドのキーがないとどのレコードとどのレコードを対応させればよいか決められないからです。

       TABLE_NO_KEY  テーブルから同じ  TABLE_NO_KEY  テーブルにカラムの値をコピーすることはできま
       す。

       TABLE_HASH_KEY  /  TABLE_PAT_KEY  /  TABLE_DAT_KEY   テーブルから他の   TABLE_HASH_KEY   /
       TABLE_PAT_KEY / TABLE_DAT_KEY テーブルにカラムの値をコピーすることができます。同じテーブル
       に対してもできます。

   構文
       このコマンドには4つの引数があります。

       すべての引数は必須です:

          column_copy from_table
                      from_name
                      to_table
                      to_name

   使い方
       このコマンドのユースケースは次の通りです。

          · カラムの設定を変更

          · テーブルの設定を変更

   カラムの設定の変更方法
       カラムの値の型を変えることができます。たとえば、カラムの型を UInt32 から ShortText  に変え
       ることができます。

       カラムの種類を変えることができます。たとえば、 COLUMN_SCALAR カラムを COLUMN_VECTOR カラム
       に変えることができます。

       カラムを他のテーブルに移動することができます。たとえば、 high_score カラムを Players  テー
       ブルから Users テーブルに移動できます。

       カラムの設定を変更する基本的なステップは次の通りです。

          1. 新しい設定で新しいカラムを作る

          2. 現在のカラムから新しいカラムへすべての値をコピーする

          3. 現在のカラムを削除する

          4. 新しいカラムを現在のカラムにリネームする

       カラムの値の型を ShortText から Int32 に変更する例です。

       スキーマ定義とサンプルデータは以下の通りです。

       実行例:

          table_create Logs TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs serial COLUMN_SCALAR Int32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Logs
          [
          {"_key": "log1", "serial": 1}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 1]

       次のコマンドは Logs.serial カラムの値の型を Int32 から ShortText に変えています。

       実行例:

          column_create Logs new_serial COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_copy Logs serial Logs new_serial
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_remove Logs serial
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_rename Logs new_serial serial
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          select Logs
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "serial",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "log1",
          #         "1"
          #       ]
          #     ]
          #   ]
          # ]

       select のレスポンスを見ると Logs.serialShortText の値を保存していることがわかります。

       カラムの種類を COLUMN_SCALAR から COLUMN_VECTOR に変更する例です。

       スキーマ定義とサンプルデータは以下の通りです。

       実行例:

          table_create Entries TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entries tag COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Entries
          [
          {"_key": "entry1", "tag": "Groonga"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 1]

       次のコマンドは Entries.tagCOLUMN_SCALAR から COLUMN_VECTOR へ変更します。

       実行例:

          column_create Entries new_tag COLUMN_VECTOR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_copy Entries tag Entries new_tag
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_remove Entries tag
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_rename Entries new_tag tag
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          select Entries
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "entry1",
          #         [
          #           "Groonga"
          #         ]
          #       ]
          #     ]
          #   ]
          # ]

       select  のレスポンスを見ると、 Entries.tagCOLUMN_VECTOR の値を保存していることがわかり
       ます。

       high_score カラムを Players テーブルから Users テーブルに移動する例です。

       スキーマ定義とサンプルデータは以下の通りです。

       実行例:

          table_create Players TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Players high_score COLUMN_SCALAR Int32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Players
          [
          {"_key": "player1", "high_score": 100}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 1]

       次のコマンドは high_score カラムを Players テーブルから Users テーブルに移動します。

       実行例:

          table_create Users TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Users high_score COLUMN_SCALAR Int32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_copy Players high_score Users high_score
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_remove Players high_score
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          select Users
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "high_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         1,
          #         "player1",
          #         100
          #       ]
          #     ]
          #   ]
          # ]

       select の結果を見ると、 Players.high_scoreUsers.high_score  に移動できていることがわか
       ります。

   テーブルの設定の変更方法
       テーブルのキーの型を変更できます。たとえば、キーの型を  Int32  から ShortText に変更できま
       す。

       テーブルの種類を変更できます。たとえば、 TABLE_HASH_KEY テーブルを TABLE_PAT_KEY  テーブル
       に変更できます。

       デフォルトトークナイザーやノーマライザーなど他のオプションも変更できます。たとえば、デフォ
       ルトトークナイザーを TokenBigrm から TokenBigramSplitSymbolAlphaDigit に変更できます。

       注釈:
          TABLE_NO_KEY テーブルは変更できません。なぜなら、 TABLE_NO_KEY レコードのキーがないから
          です。レコードのキーがないとコピー先のレコードを特定することができません。

       テーブルの設定を変更する基本的なステップは次の通りです。

          1. 新しい設定で新しいテーブルを作る

          2. すべてのカラムを同じ設定で新しいテーブルに作る

          3. 現在のテーブルから新しいテーブルへすべてのカラムの値をコピーする

          4. 現在のテーブルを削除する

          5. 新しいテーブルを現在のテーブルにリネームする

       テーブルのキーの型を Int32 から ShortText に変更する例です。

       スキーマ定義とサンプルデータは以下の通りです。

       実行例:

          table_create IDs TABLE_HASH_KEY Int32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create IDs label COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create IDs used COLUMN_SCALAR Bool
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table IDs
          [
          {"_key": 100, "label": "ID 100", used: true}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 1]

       次のコマンドは IDs テーブルのキーの型を Int32 から ShortText に変更します。

       実行例:

          table_create NewIDs TABLE_HASH_KEY Int32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create NewIDs label COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create NewIDs used COLUMN_SCALAR Bool
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_copy IDs label NewIDs label
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_copy IDs used  NewIDs used
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_remove IDs
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_rename NewIDs IDs
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          select IDs
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "Int32"
          #         ],
          #         [
          #           "label",
          #           "ShortText"
          #         ],
          #         [
          #           "used",
          #           "Bool"
          #         ]
          #       ],
          #       [
          #         1,
          #         100,
          #         "ID 100",
          #         true
          #       ]
          #     ]
          #   ]
          # ]

       select のレスポンスを見ると、 IDsShortText のキーを保存していることがわかります。

       テーブルの種類を TABLE_HASH_KEY から TABLE_PAT_KEY に変更する例です。

       スキーマ定義とサンプルデータは以下の通りです。

       実行例:

          table_create Names TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Names used COLUMN_SCALAR Bool
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Entries
          [
          {"_key": "alice", "used": false}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 1]

       次のコマンドは Names テーブルを TABLE_HASH_KEY から TABLE_PAT_KEY に変更します。

       実行例:

          table_create NewNames TABLE_PAT_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create NewNames used COLUMN_SCALAR Bool
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_copy Names used NewNames used
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_remove Names
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_rename NewNames Names
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          select Names --filter '_key @^ "ali"'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         0
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "used",
          #           "Bool"
          #         ]
          #       ]
          #     ]
          #   ]
          # ]

       select  で  script-syntax-prefix-search-operator を使えているので、 NamesTABLE_PAT_KEY
       に変わったことがわかります。TABLE_HASH_KEY では script-syntax-prefix-search-operator  を使
       えません。

   引数
       このセクションでは引数について説明します。

   必須引数
       すべての引数は必須です。

   from_table
       ソースカラムのテーブル名を指定します。

       TABLE_NO_KEY テーブルを含むすべてのテーブルを指定できます。

       TABLE_NO_KEY  テーブルを指定するときは、 to_table には同じテーブルを指定しなければいけませ
       ん。

       from_table の使用例です。

       スキーマ定義とサンプルデータは以下の通りです。

       実行例:

          table_create FromTable TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create FromTable from_column COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create FromTable to_column   COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table FromTable
          [
          {"_key": "key1", "from_column": "value1"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 1]
          select FromTable --output_columns _key,from_column,to_column
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "from_column",
          #           "ShortText"
          #         ],
          #         [
          #           "to_column",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "key1",
          #         "value1",
          #         ""
          #       ]
          #     ]
          #   ]
          # ]

       すべての値を from_column から to_column にコピーできます。

       実行例:

          column_copy FromTable from_column FromTable to_column
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          select FromTable --output_columns _key,from_column,to_column
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "from_column",
          #           "ShortText"
          #         ],
          #         [
          #           "to_column",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "key1",
          #         "value1",
          #         "value1"
          #       ]
          #     ]
          #   ]
          # ]

   from_name
       値をコピーするカラムの名前を指定します。

       具体例は from_table を見てください。

   to_table
       コピー先のカラムのテーブル名を指定します。

       同じテーブル内でカラムの値をコピーしたいときは、 from_table に指定した名前と同じ名前を指定
       します。

       to_tableTABLE_NO_KEY テーブルを指定することはできません。なぜなら、レコードのキーがな
       いとGroongaはコピー先のレコードを特定できないからです。

       例外が1つあります。 from_tableto_table に同じテーブル名を指定した場合は、 to_tableTABLE_NO_KEY    テーブルを指定できます。なぜなら、コピー元テーブルとコピー先テーブルが同じ
       テーブルならGroongaはコピー先のレコードを特定できるからです。

       to_table を使った例です。

       スキーマ定義とサンプルデータは以下の通りです。

       実行例:

          table_create Table TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Table column COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create ToTable TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create ToTable to_column COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Table
          [
          {"_key": "key1", "column": "value1"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 1]

       Table.column から ToTable.to_column にすべての値をコピーできます。

       実行例:

          column_copy Table column ToTable to_column
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          select ToTable --output_columns _key,to_column
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "to_column",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "key1",
          #         "value1"
          #       ]
          #     ]
          #   ]
          # ]

   to_name
       コピー先のカラム名を指定します。

       具体例は to_table を見てください。

   省略可能引数
       省略可能な引数はありません。

   戻り値
       このコマンドが成功したときは以下のようにボディは true になります:

          [HEADER, true]

       このコマンドが失敗すると、 HEADER にエラーの詳細が含まれます。

       HEADER については /reference/command/output_format を参照してください。

   column_create
   概要
       column_create - カラムの追加

       Groonga組込コマンドの一つであるcolumn_createについて説明します。組込コマンドは、groonga実
       行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することに
       よって実行します。

       column_createは、使用しているデータベースのテーブルに対してカラムを追加します。

   構文
          column_create table name flags type [source]

   使い方
       テーブルEntryに、ShortText型の値を格納するカラム、bodyを作成します。:

          column_create Entry body --type ShortText
          [true]

       テーブルTermに、Entryテーブルのbodyカラムの値を対象とする完全転置インデックス型カラ
       ム、entry_bodyを作成します。:

          column_create Term entry_body COLUMN_INDEX|WITH_POSITION Entry body
          [true]

   引数
       table
          カラムを追加するテーブルの名前を指定します。

       name
          作成するカラムの名前を指定します。カラム名は、テーブルの中で一意でなければなりません。

          ピリオド('.'),        コロン(':')を含む名前のカラムは作成できません。また、アンダースコ
          ア('_')で始まる名前は予約済みであり、使用できません。

       flags
          カラムの属性を表す以下の数値か、パイプ('|')で組み合わせたシンボル名を指定します。

          0, COLUMN_SCALAR
                 単一の値が格納できるカラムを作成します。

          1, COLUMN_VECTOR
                 複数の値の配列を格納できるカラムを作成します。

          2, COLUMN_INDEX
                 インデックス型のカラムを作成します。

          カラムの値を圧縮するためのフラグが2つあります。ただしそれらのフラグを指定することは今の
          ところできません。これはカラムの値を参照するときにメモリリークする問題  GitHub#6 がある
          ためです。 この問題はzlib、lzoいずれでも発生します。

          16, COMPRESS_ZLIB
                 zlibを使ってカラムの値を圧縮します。このフラグはGroongaを --with-zlib つきでビル
                 ドすると有効になります。

          32, COMPRESS_LZO
                 lzoを使ってカラムの値を圧縮します。このフラグはGroongaを --with-lzo つきでビルド
                 すると有効になります。

          インデックス型のカラムについては、flagsの値に以下の値を加えることによって、追加の属  性
          を指定することができます。

          128, WITH_SECTION
                 段落情報を格納するインデックスを作成します。

          256, WITH_WEIGHT
                 ウェイト情報を格納するインデックスを作成します。

          512, WITH_POSITION
                 位置情報を格納するインデックス(完全転置インデックス)を作成します。

       type
          値の型を指定します。Groongaの組込型か、同一データベースに定義済みのユーザ定義型、定義済
          みのテーブルを指定することができます。

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

   戻り値
          [HEADER, SUCCEEDED]

       HEADER
          HEADER については /reference/command/output_format を参照してください。

       SUCCEEDED
          コマンドの実行が成功するとtrueを返します。失敗するとエラーとしてfalseを返します。

   column_list
   概要
       column_list コマンドはテーブルにあるカラムの一覧を返します。

   構文
       このコマンドの引数は1つで必須です:

          column_list table

   使い方
       以下は column_list コマンドの簡単な使用例です。

       実行例:

          table_create Users TABLE_PAT_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Users age COLUMN_SCALAR UInt8
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Users tags COLUMN_VECTOR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_list Users
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         "id",
          #         "UInt32"
          #       ],
          #       [
          #         "name",
          #         "ShortText"
          #       ],
          #       [
          #         "path",
          #         "ShortText"
          #       ],
          #       [
          #         "type",
          #         "ShortText"
          #       ],
          #       [
          #         "flags",
          #         "ShortText"
          #       ],
          #       [
          #         "domain",
          #         "ShortText"
          #       ],
          #       [
          #         "range",
          #         "ShortText"
          #       ],
          #       [
          #         "source",
          #         "ShortText"
          #       ]
          #     ],
          #     [
          #       256,
          #       "_key",
          #       "",
          #       "",
          #       "COLUMN_SCALAR",
          #       "Users",
          #       "ShortText",
          #       []
          #     ],
          #     [
          #       257,
          #       "age",
          #       "/tmp/groonga-databases/commands_column_list.0000101",
          #       "fix",
          #       "COLUMN_SCALAR|PERSISTENT",
          #       "Users",
          #       "UInt8",
          #       []
          #     ],
          #     [
          #       258,
          #       "tags",
          #       "/tmp/groonga-databases/commands_column_list.0000102",
          #       "var",
          #       "COLUMN_VECTOR|PERSISTENT",
          #       "Users",
          #       "ShortText",
          #       []
          #     ]
          #   ]
          # ]

   引数
       このセクションでは column_list の引数について説明します。

   必須引数
       すべての引数は必須です。

   table
       カラムの一覧を取得するテーブルの名前を指定します。

   戻り値
       column_list はテーブルのカラム一覧を返します。

          [
            HEADER,
            [
              COLUMN_LIST_HEADER,
              COLUMN_INFORMATION1,
              COLUMN_INFORMATION2,
              ...
            ]
          ]

       HEADER
          HEADER については /reference/command/output_format を参照してください。

       COLUMN_LIST_HEADER
          COLUMN_LIST_HEADER は 各 COLUMN_INFORMATION の内容を説明します。

          COLUMN_LIST_HEADER は以下の形式です:

              [
                ["id",     "UInt32"],
                ["name",   "ShortText"],
                ["path",   "ShortText"],
                ["type",   "ShortText"],
                ["flags",  "ShortText"],
                ["domain", "ShortText"],
                ["range",  "ShortText"],
                ["source", "ShortText"]
              ]

          以下のことを意味します。

              · COLUMN_INFORMATION の1番目の要素は id の値で、その値の型は UInt32 です。

              · COLUMN_INFORMATION の2番目の要素は name の値で、その値の型は ShortText です。

              · COLUMN_INFORMATION の3番目の要素は…

          詳細については、次の COLUMN_INFORMATION の説明を参照して下さい。

          このフィールドはカラムの情報のメタデータを提供します。したがって、このフィールドは人で
          はなくプログラムに有用です。

       COLUMN_INFORMATIONCOLUMN_INFORMATION は以下の形式です:

              [
                ID,
                NAME,
                PATH,
                TYPE,
                FLAGS,
                DOMAIN,
                RANGE,
                SOURCES
              ]

          ID
              GroongaデータベースのカラムIDです。通常、それを気にする必要はありません。

          NAME
              カラム名。

          PATH
              カラムのデータを保存しているパス。

          TYPE
              カラムの型。次のうちのどれかです。

                                  ┌──────┬──────────────────────────────────┐
                                  │Value │ 説明                             │
                                  ├──────┼──────────────────────────────────┤
                                  │fix   │ このカラムは、固定長カラムで     │
                                  │      │ す。固定長型のスカラーカラム     │
                                  │      │ は、固定長カラムです。           │
                                  ├──────┼──────────────────────────────────┤
                                  │var   │ このカラムは、可変長カラムで     │
                                  │      │ す。ベクターカラムまたは可変長型 │
                                  │      │ のスカラーカラムは、可変長カラム │
                                  │      │ です。                           │
                                  ├──────┼──────────────────────────────────┤
                                  │index │ このカラムはインデックスカラムで │
                                  │      │ す。                             │
                                  └──────┴──────────────────────────────────┘

          FLAGS
              カラムのフラグです。各フラグは、COLUMN_VECTOR|WITH_WEIGHT のように | で分けられてい
              ます。  FLAGS は、COLUMN_SCALAR , COLUMN_VECTOR , COLUMN_INDEX のいずれか1つを含ま
              なければいけません。他のフラグは省略可能です。

              有効なフラグは以下の通りです。

                              ┌──────────────┬──────────────────────────────────┐
                              │フラグ        │ 説明                             │
                              ├──────────────┼──────────────────────────────────┤
                              │COLUMN_SCALAR │ このカラムはスカラーカラムです。 │
                              ├──────────────┼──────────────────────────────────┤
                              │COLUMN_VECTOR │ このカラムはベクターカラムです。 │
                              ├──────────────┼──────────────────────────────────┤
                              │COLUMN_INDEX  │ このカラムはインデックスカラムで │
                              │              │ す。                             │
                              ├──────────────┼──────────────────────────────────┤
                              │WITH_WEIGHT   │ このカラムは、重みを持つことがで │
                              │              │ きます。    COLUMN_VECTOR     と │
                              │              │ COLUMN_INDEX  は重みを持てます。 │
                              │              │ COLUMN_SCALAR は、重みを持ちませ │
                              │              │ ん。                             │
                              └──────────────┴──────────────────────────────────┘

                              │WITH_SECTION  │ このカラムはセクション(段落)情報 │
                              │              │ を持つことができます。           │
                              │              │ COLUMN_INDEX     はセクション(段 │
                              │              │ 落)情報を持てます。              │
                              │              │ COLUMN_SCALARCOLUMN_VECTOR │
                              │              │ はセクション(段落)情報を持ちませ │
                              │              │ ん。                             │
                              │              │                                  │
                              │              │ マルチカラムインデックスはこのフ │
                              │              │ ラグを持ちます。                 │
                              ├──────────────┼──────────────────────────────────┤
                              │WITH_POSITION │ このカラムは出現位置情報を持つこ │
                              │              │ とができます。 COLUMN_INDEX は出 │
                              │              │ 現位置情報を持てます。           │
                              │              │ COLUMN_SCALARCOLUMN_VECTOR │
                              │              │ は出現位置情報を持ちません。     │
                              │              │                                  │
                              │              │ 全文検索インデックスはこのフラグ │
                              │              │ を持つべきです。                 │
                              ├──────────────┼──────────────────────────────────┤
                              │PERSISTENT    │ このカラムは永続カラムです。それ │
                              │              │ は /reference/columns/pseudo  で │
                              │              │ はないことを意味します。         │
                              └──────────────┴──────────────────────────────────┘

          DOMAIN
              カラムを持っているテーブルの名前です。

          RANGE
              カラムの型名です。型名かテーブル名です。

          SOURCES
              インデックスのソースカラム名の配列です。インデックスカラムがマルチカラムインデック
              スの場合、配列は2つまたはそれ以上のソースカラム名を有します。

              COLUMN_SCALARCOLUMN_VECTOR では常に空の配列です。

   参考
       · /reference/commands/column_create

       · /reference/column

   column_remove
   概要
       column_remove - テーブルに定義されているカラムの削除

       Groonga組込コマンドの一つであるcolumn_removeについて説明します。組込コマンドは、groonga実
       行ファイルの引数、>標準入力、またはソケット経由でgroongaサーバにリクエストを送信することに
       よって実行します。

       column_removeはテーブルに定義されているカラムを削除します。 また、付随するインデックスも削
       除されます。[1]

   構文
          column_remove table name

   使い方
          column_remove Entry body

          [true]
       脚注

       [1]  マルチセクションインデックスの一部である場合も、インデックスが削除されます。

   引数
       table
          削除対象のカラムが定義されているテーブルの名前を指定します。

       name
          削除対象のカラム名を指定します。

   戻り値
          [成功かどうかのフラグ]

       成功かどうかのフラグ
          エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。

   column_rename
   概要
       column_rename コマンドはカラム名を変更します。

       これは軽い操作です。名前とカラムオブジェクト間の関係を変更するだけです。カラムの値をコピー
       しません。

       これは危険な操作です。 column_rename  を実行している間、読み取り操作を含む全ての操作を停止
       しなければいけません。以下のケースが起こった場合、Groongaプロセスはクラッシュするかもしれ
       ません。

          · 現在のカラム名で名前を変更しようとしているカラムにアクセスする操作(たとえば   select
            )を開始します。以降、現在のカラム名を      古いカラム名     と呼ぶことにします。これ
            は、今、このカラム名を変更しようとしているからです。

          · column_rename を実行します。 select は実行中です。

          · select は古いカラム名で名前が変更されたカラムにアクセスします。しかし、カラムはすでに
            新しいカラム名に変更されているため、  select は古いカラム名でカラムを見つけることがで
            きません。このときGroongaプロセスがクラッシュするかもしれません。

   構文
       このコマンドの引数は3つです。

       すべての引数は必須です:

          column_rename table name new_name

   使い方
       以下は column_rename コマンドの簡単な使用例です。

       実行例:

          table_create Users TABLE_PAT_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Users score COLUMN_SCALAR Int32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Users
          [
          {"_key": "Alice",  "score": 2},
          {"_key": "Bob",    "score": 0},
          {"_key": "Carlos", "score": -1}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]
          column_rename Users score point
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_list Users
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         "id",
          #         "UInt32"
          #       ],
          #       [
          #         "name",
          #         "ShortText"
          #       ],
          #       [
          #         "path",
          #         "ShortText"
          #       ],
          #       [
          #         "type",
          #         "ShortText"
          #       ],
          #       [
          #         "flags",
          #         "ShortText"
          #       ],
          #       [
          #         "domain",
          #         "ShortText"
          #       ],
          #       [
          #         "range",
          #         "ShortText"
          #       ],
          #       [
          #         "source",
          #         "ShortText"
          #       ]
          #     ],
          #     [
          #       256,
          #       "_key",
          #       "",
          #       "",
          #       "COLUMN_SCALAR",
          #       "Users",
          #       "ShortText",
          #       []
          #     ],
          #     [
          #       257,
          #       "point",
          #       "/tmp/groonga-databases/commands_column_rename.0000101",
          #       "fix",
          #       "COLUMN_SCALAR|PERSISTENT",
          #       "Users",
          #       "Int32",
          #       []
          #     ]
          #   ]
          # ]
          select Users
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "point",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         1,
          #         "Alice",
          #         2
          #       ],
          #       [
          #         2,
          #         "Bob",
          #         0
          #       ],
          #       [
          #         3,
          #         "Carlos",
          #         -1
          #       ]
          #     ]
          #   ]
          # ]

   引数
       このセクションでは column_rename の引数について説明します。

   必須引数
       すべての引数は必須です。

   table
       名前を変更したいカラムが所属するテーブルの名前を指定します。

   name
       名前を変更するカラムの名前を指定します。

   new_name
       新しいカラム名を指定します。

   戻り値
          [HEADER, SUCCEEDED_OR_NOT]

       HEADER
          HEADER については /reference/command/output_format を参照してください。

       SUCCEEDED_OR_NOT
          コマンドの実行が成功するとtrueを返します。失敗するとfalseを返します。

   config_delete
   概要
       バージョン 5.1.2 で追加.

       config_delete コマンドは指定した設定項目を削除します。

   構文
       このコマンドの引数は1つで必須です:

          config_delete key

   使い方
       以下は alias.column 設定項目を削除する例です。

       実行例:

          config_set alias.column Aliases.real_name
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          config_get alias.column
          # [[0, 1337566253.89858, 0.000355720520019531], "Aliases.real_name"]
          config_delete alias.column
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          config_get alias.column
          # [[0, 1337566253.89858, 0.000355720520019531], ""]

       以下は存在しない設定項目を削除する例です。

       実行例:

          config_delete nonexistent
          # [
          #   [
          #     -22,
          #     1337566253.89858,
          #     0.000355720520019531,
          #     "[config][delete] failed to delete",
          #     [
          #       [
          #         "grn_config_delete",
          #         "config.c",
          #         166
          #       ]
          #     ]
          #   ],
          #   false
          # ]

       config_delete は存在しない設定項目を削除しようとするとエラーを返します。

   引数
       このセクションではすべての引数について説明します。

   必須引数
       必須の引数が1つあります。

   key
       対象設定項目のキーを指定します。

       最大キーサイズは4KiBです。

       キーには空文字列を使うことはできません。

   省略可能引数
       省略可能な引数はありません。

   戻り値
       config_delete コマンドは設定項目の削除に成功したかどうかを返します。:

          [HEADER, SUCCEEDED_OR_NOT]

   HEADER
       HEADER については /reference/command/output_format を参照してください。

   SUCCEEDED_OR_NOT
       コマンドの実行が成功するとtrueを返します。失敗するとエラーとしてfalseを返します。

   参考
          · /reference/configuration

          · config_get

          · config_set

   config_get
   概要
       バージョン 5.1.2 で追加.

       config_get コマンドは指定した設定項目の値を返します。

   構文
       このコマンドの引数は1つで必須です:

          config_get key

   使い方
       以下は alias.column 設定項目に値を設定して、設定した値を取得する例です。

       実行例:

          config_set alias.column Aliases.real_name
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          config_get alias.column
          # [[0, 1337566253.89858, 0.000355720520019531], "Aliases.real_name"]

       以下は存在しない設定項目の値を取得する例です。

       実行例:

          config_get nonexistent
          # [[0, 1337566253.89858, 0.000355720520019531], ""]

       config_get は存在しない設定項目の場合は空文字列を返します。

   引数
       このセクションではすべての引数について説明します。

   必須引数
       必須の引数が1つあります。

   key
       対象設定項目のキーを指定します。

       最大キーサイズは4KiBです。

       キーには空文字列を使うことはできません。

   省略可能引数
       省略可能な引数はありません。

   戻り値
       config_get コマンドは指定した設定項目の値を返します。:

          [HEADER, VALUE]

   HEADER
       HEADER については /reference/command/output_format を参照してください。

   VALUE
       VALUEkey で指定した設定項目の値です。文字列です。

   参考
          · /reference/configuration

          · config_set

          · config_delete

   config_set
   概要
       バージョン 5.1.2 で追加.

       config_set コマンドは指定した設定項目に値を設定します。

   構文
       このコマンドの引数は2つで必須です。:

          config_set key value

   使い方
       以下は alias.column 設定項目に値を設定して、設定した値を確認する例です。

       実行例:

          config_set alias.column Aliases.real_name
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          config_get alias.column
          # [[0, 1337566253.89858, 0.000355720520019531], "Aliases.real_name"]

   引数
       このセクションではすべての引数について説明します。

   必須引数
       いくつか必須の引数があります。

   key
       対象設定項目のキーを指定します。

       最大キーサイズは4KiBです。

       キーには空文字列を使うことはできません。

   value
       key で指定した対象設定項目の値を指定します。

       値の最大サイズは4091B(= 4KiB - 5B)です。

   省略可能引数
       省略可能な引数はありません。

   戻り値
       config_set コマンドは設定項目に値を設定できたかどうかを返します。:

          [HEADER, SUCCEEDED_OR_NOT]

   HEADER
       HEADER については /reference/command/output_format を参照してください。

   SUCCEEDED_OR_NOT
       コマンドの実行が成功するとtrueを返します。失敗するとエラーとしてfalseを返します。

   参考
          · /reference/configuration

          · config_get

          · config_delete

   database_unmap
   概要
       バージョン 5.0.7 で追加.

       database_unmap      はデータベース中のすでにマップしてあるテーブルとカラムをアンマップしま
       す。「マップ」とはテーブルとカラムをディスクからロードしてメモリー上に展開することです。「
       アンマップ」とはマップしたメモリーを解放することです。

       注釈:
          通常、 database_unmap  を使う必要はありません。なぜなら、OSが賢くメモリーを管理してくれ
          るからです。もし、システムの残メモリーが少なくなったら、OSはGroongaが使っているメモリー
          をディスクに退避します。退避したメモリーは必要になったらまたメモリーに戻します。OSは
          使っていないメモリーを優先して退避します。

       ご用心:
          このコマンドは thread_limit1 を返すときしか使えません。つまり、マルチスレッド環境で
          はこのコマンドは動かないということです。

   構文
       このコマンドに引数はありません:

          database_unmap

   使い方
       最大スレッド数を 1 に変更したあとならデータベースをアンマップできます。

       実行例:

          thread_limit --max 1
          # [[0, 1337566253.89858, 0.000355720520019531], 2]
          database_unmap
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       最大スレッド数が 1 より大きい場合は database_unmap は失敗します。

       実行例:

          thread_limit --max 2
          # [[0, 1337566253.89858, 0.000355720520019531], 1]
          database_unmap
          # [
          #   [
          #     -2,
          #     1337566253.89858,
          #     0.000355720520019531,
          #     "[database_unmap] the max number of threads must be 1: <2>",
          #     [
          #       [
          #         "proc_database_unmap",
          #         "proc.c",
          #         6931
          #       ]
          #     ]
          #   ],
          #   false
          # ]

   引数
       このセクションではすべての引数について説明します。

   必須引数
       必須の引数はありません。

   省略可能引数
       省略可能な引数はありません。

   戻り値
       このコマンドが成功したときは以下のようにボディは true になります:

          [HEADER, true]

       このコマンドが失敗すると、 HEADER にエラーの詳細が含まれます。

       HEADER については /reference/command/output_format を参照してください。

   define_selector
   概要
       define_selector - 検索コマンドを定義

       Groonga組込コマンドの一つであるdefine_selectorについて説明します。組込コマンド
       は、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送
       信することによって実行します。

       define_selectorは、検索条件をカスタマイズした新たな検索コマンドを定義します。

   構文
          define_selector name table [match_columns [query [filter [scorer [sortby
                          [output_columns [offset [limit [drilldown [drilldown_sortby
                          [drilldown_output_columns [drilldown_offset [drilldown_limit]]]]]]]]]]]]]

   使い方
       テーブルEntryの全レコード・全カラムの値を出力するselectorコマンドを定義します。:

          define_selector entry_selector Entry
          [true]

   引数
       name
          定義するselectorコマンドの名前を指定します。

       table
          検索対象のテーブルを指定します。

       match_columns
          追加するselectorコマンドのmatch_columns引数のデフォルト値を指定します。

       query
          追加するselectorコマンドのquery引数のデフォルト値を指定します。

       filter
          追加するselectorコマンドのfilter引数のデフォルト値を指定します。

       scorer
          追加するselectorコマンドのscorer引数のデフォルト値を指定します。

       sortby
          追加するselectorコマンドのsortby引数のデフォルト値を指定します。

       output_columns
          追加するselectorコマンドのoutput_columns引数のデフォルト値を指定します。

       offset
          追加するselectorコマンドのoffset引数のデフォルト値を指定します。

       limit
          追加するselectorコマンドのlimit引数のデフォルト値を指定します。

       drilldown
          追加するselectorコマンドのdrilldown引数のデフォルト値を指定します。

       drilldown_sortby
          追加するselectorコマンドのdrilldown_sortby引数のデフォルト値を指定します。

       drilldown_output_columns
          追加するselectorコマンドのdrilldown_output_columns引数のデフォルト値を指定します。

       drilldown_offset
          追加するselectorコマンドのdrilldown_offset引数のデフォルト値を指定します。

       drilldown_limit
          追加するselectorコマンドのdrilldown_limit引数のデフォルト値を指定します。

   戻り値
          [成功かどうかのフラグ]

       成功かどうかのフラグ
          エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。

   参考
       /reference/grn_expr

   defrag
   概要
       defrag コマンドは指定されたオブジェクトのフラグメンテーションを解消します。

       Groonga組込コマンドの一つであるdefragについて説明します。組込コマンドは、groonga実行ファイ
       ルの引数、標準入力 、またはソケット経由でgroongaサーバにリクエストを送信することによって実
       行します。

       defragは、対象となるオブジェクト(データベースか可変長サイズカラム)を指定し、オブジェクトの
       フラグメンテーショ ンを解消します。

   構文
          defrag objname threshold

   使い方
       開いているデータベースのフラグメンテーションを解消する:

          defrag
          [300]

       テーブル名 Entry のカラム body のフラグメンテーションを解消する:

          defrag Entry.body
          [30]

   引数
       objname
          対象となるオブジェクト名を指定します。空の場合、開いているdbオブジェクトが対象となりま
          す。

   戻り値
          [フラグメンテーション解消を実行したセグメントの数]

       フラグメンテーション解消を実行したセグメントの数
          フラグメンテーション解消を実行したセグメントの数を返す。

   delete
   概要
       delete コマンドは指定したテーブルのレコードを削除します。

   カスケード削除
       複数のテーブルが関連付けられていることがあります。例えば、あるテーブルのキーが他のテーブル
       のレコードで参照されているような場合です。そのような場合にそのテーブルのキーを削除するな
       ら、他のテーブルのレコードも削除されます。

       他のテーブルのカラムの型がCOLUMN_VECTORなら、ベクターで参照しているキーだけが削除されま
       す。

   構文
          delete table [key [id [filter]]]

   使い方
       使い方を示すために使うスキーマ定義とサンプルデータは以下の通りです。

       "2"をキーとしてもつEntryテーブルからレコードを削除します。

       実行例:

          delete Entry 2
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          select Entry
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "UInt32"
          #         ],
          #         [
          #           "status",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         1,
          #         "OK"
          #       ]
          #     ]
          #   ]
          # ]

       以下はカスケード削除の例です。

       UsersテーブルのcountryカラムはCountryテーブルと関連しています。

       "カスケード削除"は指定されたキーやそのキーを参照しているレコードを削除します。

       実行例:

          table_create Country TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Users TABLE_HASH_KEY UInt32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Users name COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Users country COLUMN_SCALAR Country
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Users
          [
          {"_key": 1, "name": "John", country: "United States"}
          {"_key": 2, "name": "Mike", country: "United States"}
          {"_key": 3, "name": "Takashi", country: "Japan"}
          {"_key": 4, "name": "Hanako", country: "Japan"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 4]
          load --table Country
          [
          {"_key": "United States"}
          {"_key": "Japan"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 2]
          delete Country "United States"
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          select Country
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "Japan"
          #       ]
          #     ]
          #   ]
          # ]
          select Users
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         4
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "UInt32"
          #         ],
          #         [
          #           "country",
          #           "Country"
          #         ],
          #         [
          #           "name",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         1,
          #         "",
          #         "John"
          #       ],
          #       [
          #         2,
          #         2,
          #         "",
          #         "Mike"
          #       ],
          #       [
          #         3,
          #         3,
          #         "Japan",
          #         "Takashi"
          #       ],
          #       [
          #         4,
          #         4,
          #         "Japan",
          #         "Hanako"
          #       ]
          #     ]
          #   ]
          # ]

   引数
       table
          レコードを削除するテーブルの名前を指定します。

       key
          削除するレコードのキーを指定します。TABLE_NO_KEYを対象となるテーブルに使用しているな
          ら、指定したキーは無視されます。(そのような場合には 引数 id を使います。)

       id
          削除するレコードのIDを指定します。 引数 id を指定する場合、引数 key  を指定してはいけま
          せん。

       filter
          レコードを特定するためのgrn_exprの式を指定します。引数  filter を指定するなら、引数 keyid を指定してはいけません。

   戻り値
          [HEADER, SUCCEEDED_OR_NOT]

       HEADER
          HEADER については /reference/command/output_format を参照してください。

       SUCCEEDED_OR_NOT
          コマンドの実行が成功するとtrueを返します。失敗するとエラーとしてfalseを返します。

   参考
       load

   dump
   概要
       dump - データベースのスキーマとデータを出力する

       Groonga組込コマンドの一つであるdumpについて説明します。組込コマンドは、groonga実行ファイル
       の引数、標準入力、 またはソケット経由でgroongaサーバにリクエストを送信することによって実行
       します。

       dumpはデータベースのスキーマとデータを後から読み込めるフォーマットで出力します。dumpの結果
       は大きくなるため、    主にコマンドラインから使うことを想定しています。データベースのバック
       アップが主な利用方法です。

       dumpが出力するフォーマットは直接Groongaが解釈できるフォーマットです。そのため、以下のよう
       にしてデータベース>をコピーすることができます。:

          % groonga original/db dump > dump.grn
          % mkdir backup
          % groonga -n backup/db < dump.grn

   構文
          dump [tables]
               [dump_plugins]
               [dump_schema]
               [dump_records]
               [dump_indexes]

   使い方
       dumpの挙動を確認するためのスキーマ定義とサンプルデータは以下の通りです。

          plugin_register token_filters/stop_word
          table_create Bookmarks TABLE_HASH_KEY ShortText
          column_create Bookmarks title COLUMN_SCALAR ShortText
          table_create Lexicon TABLE_PAT_KEY ShortText
          table_create Sites TABLE_NO_KEY
          column_create Sites url COLUMN_SCALAR ShortText
          column_create Lexicon bookmark_title COLUMN_INDEX Bookmarks title
          load --table Bookmarks
          [
          {"_key":"Groonga", "title":"Introduction to Groonga"},
          {"_key":"Mroonga", "title":"Introduction to Mroonga"}
          ]
          load --table Sites
          [
          {"_key": 1, "url":"http://groonga.org"},
          {"_key": 2, "url":"http://mroonga.org"}
          ]

       データベースのすべてのデータをダンプ:

          > dump
          plugin_register token_filters/stop_word

          table_create Sites TABLE_NO_KEY
          column_create Sites url COLUMN_SCALAR ShortText

          table_create Bookmarks TABLE_HASH_KEY ShortText
          column_create Bookmarks title COLUMN_SCALAR ShortText

          table_create Lexicon TABLE_PAT_KEY ShortText

          load --table Sites
          [
          ["_id","url"],
          [1,"http://groonga.org"],
          [2,"http://mroonga.org"]
          ]

          load --table Bookmarks
          [
          ["_key","title"],
          ["Groonga","Introduction to Groonga"],
          ["Mroonga","Introduction to Mroonga"]
          ]

          create Lexicon bookmark_title COLUMN_INDEX Bookmarks title

       スキーマと指定したテーブルのデータをダンプ:

          > dump Bookmarks
          plugin_register token_filters/stop_word

          table_create Sites TABLE_NO_KEY
          column_create Sites url COLUMN_SCALAR ShortText

          table_create Bookmarks TABLE_HASH_KEY ShortText
          column_create Bookmarks title COLUMN_SCALAR ShortText

          table_create Lexicon TABLE_PAT_KEY ShortText

          load --table Bookmarks
          [
          ["_key","title"],
          ["Groonga","Introduction to Groonga"],
          ["Mroonga","Introduction to Mroonga"]
          ]

          column_create Lexicon bookmark_title COLUMN_INDEX Bookmarks title

       プラグインのみダンプ:

          > dump --dump_schema no --dump_records no --dump_indexes no
          plugin_register token_filters/stop_word

       レコードのみダンプ:

          > dump --dump_schema no --dump_plugins no --dump_indexes no
          load --table Sites
          [
          ["_id","url"],
          [1,"http://groonga.org"],
          [2,"http://mroonga.org"]
          ]

          load --table Bookmarks
          [
          ["_key","title"],
          ["Groonga","Introduction to Groonga"],
          ["Mroonga","Introduction to Mroonga"]
          ]

       スキーマのみダンプ:

          > dump --dump_records no --dump_plugins no --dump_indexes no
          table_create Sites TABLE_NO_KEY
          column_create Sites url COLUMN_SCALAR ShortText

          table_create Bookmarks TABLE_HASH_KEY ShortText
          column_create Bookmarks title COLUMN_SCALAR ShortText

          table_create Lexicon TABLE_PAT_KEY ShortText

   引数
       いくつか省略可能な引数があります。

   省略可能引数
   tables
       出力対象のテーブルを「,」(カンマ)区切りで指定します。存在しないテーブルを指定した場合は
       無視されます。

   dump_plugins
       バージョン 5.0.3 で追加.

       登録されたプラグインを出力に含めるかどうかをカスタマイズすることができます。登録されたプラ
       グインを出力から除外する場合、 no を指定します。

       デフォルト値は yes です。

   dump_schema
       バージョン 5.0.3 で追加.

       データベーススキーマを出力に含めるかどうかをカスタマイズすることができます。データベースス
       キーマを出力から除外する場合、 no を指定します。

       デフォルト値は yes です。

   dump_records
       バージョン 5.0.3 で追加.

       レコードを出力に含めるかどうかをカスタマイズすることができます。レコードを出力から除外する
       場合、 no を指定します。

       デフォルト値は yes です。

   dump_indexes
       バージョン 5.0.3 で追加.

       インデックスを出力に含めるかどうかをカスタマイズすることができます。インデックスを出力から
       除外する場合、 no を指定します。

       デフォルト値は yes です。

   戻り値
       データベースのスキーマとデータをGroongaの組み込みコマンド呼び出し形式で出力しま
       す。output_type指定は無視されます。

   io_flush
   概要
       注釈:
          このコマンドは実験的な機能です。

       バージョン 5.0.5 で追加.

       io_flush        はメモリー上のすべての変更を明示的にディスクに書き出します。通常、明示的に
       io_flush        を使う必要はありません。なぜなら、OSが自動的に書き出してくれるからです。ま
       た、OSが書き出した方が効率的だからです。

       いくつか明示的に  io_flush を使う必要があるケースがあります。1つは、システムが不意にクラッ
       シュすることがよくあるケースです。もう1つは、Groongaプロセスを通常の終了プロセスで終了でき
       ない可能性があるケースです。(通常の終了プロセスとは、例えば、 shutdown を使った終了プロセ
       スです。)これらのケースでは、Groongaデータベースに変更を加えた後に io_flush  を使うとよい
       です。以下はGroongaデータベースに変更を加えるコマンドのリストです。

          · load

          · delete

          · truncate

          · table_create

          · table_remove

          · table_rename

          · column_create

          · column_remove

          · column_rename

          · plugin_register

          · plugin_unregister

       もし、  select  の  select-scorer パラメーターをカラムの値を変更するために使っているなら、
       select もこのリストに入ります。

       io_flush  は重い処理になる可能性があることに注意してください。もし、メモリー上に多くの変更
       があるなら、それらをディスクに書き出す処理は重い処理になります。

   構文
       このコマンドには2つの引数があります。

       すべての引数は省略可能です:

          io_flush [target_name=null]
                   [recursive=yes]

   使い方
       引数無しで実行するとメモリー上のすべての変更をディスクに書き出すことができます。

       実行例:

          io_flush
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       もし変更点を把握しているなら、書き出し対象を狭めることができます。以下はコマンドと書き出し
       対象の対応表です。

┌─────────────────────────┬──────────────────────────┬────────────────────────────────────────────────────────────────────────────┐
│コマンド                 │ 書き出し対象             │ io_flush の引数                                                            │
├─────────────────────────┼──────────────────────────┼────────────────────────────────────────────────────────────────────────────┤
│loaddelete           │ テーブルとそのテーブルの │ テーブルとそのテーブルの                                                   │
├─────────────────────────┼──────────────────────────┼────────────────────────────────────────────────────────────────────────────┤
│truncate                 │ テーブルとそのテーブルの │ テーブルとそのテーブルのカラム:                                            │
├─────────────────────────┼──────────────────────────┼────────────────────────────────────────────────────────────────────────────┤
│table_create             │ 処理対象のテーブルとデー │ テーブル:                                                                  │
├─────────────────────────┼──────────────────────────┼────────────────────────────────────────────────────────────────────────────┤
│table_remove          と │ データベース。           │ データベース:                                                              │
│table_rename             │                          │                                                                            │
├─────────────────────────┼──────────────────────────┼────────────────────────────────────────────────────────────────────────────┤
│column_create            │ 処理対象のカラムとデータ │ テーブル:                                                                  │
├─────────────────────────┼──────────────────────────┼────────────────────────────────────────────────────────────────────────────┤
│column_remove         と │ データベース。           │ データベース:                                                              │
│column_rename            │                          │                                                                            │
├─────────────────────────┼──────────────────────────┼────────────────────────────────────────────────────────────────────────────┤
│plugin_register       と │ データベース。           │ データベース:                                                              │
│plugin_unregister        │                          │                                                                            │
└─────────────────────────┴──────────────────────────┴────────────────────────────────────────────────────────────────────────────┘

   引数
       このセクションではすべての引数について説明します。

   必須引数
       必須の引数はありません。

   省略可能引数
       いくつか省略可能な引数があります。

   target_name
       書き出し対象オブジェクトの名前を指定します。書き出し対象オブジェクトはデータベース、テーブ
       ル、カラムのどれかです。

       このパラメーターを省略すると、データベースが書き出し対象オブジェクトになります。

       実行例:

          io_flush
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       テーブル名を指定すると、そのテーブルが書き出し対象オブジェクトになります。

       実行例:

          table_create Users TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          io_flush --target_name Users
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       カラム名を指定すると、そのカラムが書き出し対象オブジェクトになります。

       実行例:

          column_create Users age COLUMN_SCALAR UInt8
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          io_flush --target_name Users.age
          # [[0, 1337566253.89858, 0.000355720520019531], true]

   recursive
       書き出し対象オブジェクトの子オブジェクトも書き出し対象にするかどうかを指定します。

       データベースの子オブジェクトはすべてのテーブルとすべてのカラムです。

       テーブルの子オブジェクトはそのテーブルのすべてのカラムです。

       カラムの子オブジェクトはありません。

       recursive の値は yes または no でなければいけません。 yes は指定した書き出し対象オブジェク
       トとその子オブジェクトすべてを書き出し対象オブジェクトにするという意味です。 no は指定した
       書き出し対象オブジェクトのみを書き出し対象オブジェクトにするという意味です。

       次の  io_flush  はデータベースとすべてのテーブルとすべてのカラムのすべての変更を書き出しま
       す。

       実行例:

          io_flush --recursive yes
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       次の io_flush はデータベースの変更だけを書き出します。

       実行例:

          io_flush --recursive no
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       他の値(つまり、 yes でも no でもない値)を指定した場合、または recursive パラメーターを指
       定しない場合は yes が使われます。

       recursive 引数の値が不正なので、次のケースでは yes が使われます。

       実行例:

          io_flush --recursive invalid
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       recursive パラメーターが指定されていないので、次のケースでは yes が使われます。

       実行例:

          io_flush
          # [[0, 1337566253.89858, 0.000355720520019531], true]

   戻り値
       このコマンドが成功したときは以下のようにボディは true になります:

          [HEADER, true]

       このコマンドが失敗すると、 HEADER にエラーの詳細が含まれます。

       HEADER については /reference/command/output_format を参照してください。

   load
   概要
       load は、使用しているデータベースのテーブルにレコードを登録し、カラムの値を更新します。

   構文
          load values table [columns [ifexists [input_type]]]

   引数
       このセクションではすべての引数について説明します。

       values
          input_typeに指定する形式で登録するレコードの値を表現した文字列を渡します。
          input_typeがjsonである場合には、以下のいずれかの形式が使用できます。

          Format 1:
                 [[カラム名1,  カラム名2,..],  [カラム値1,  カラム値2,..],   [カラム値1,   カラム
                 値2,..],..]

          Format 2:
                 [{カラム名1: カラム値1, カラム名2: カラム値2}, {カラム名1: カラム値1, カラム名2:
                 カラム値2},..]

          形式1の[カラム名1, カラム名2,..]の要素は columns 引数が省略された場合のみ有効です。

          対象のテーブルが主キーを持つテーブルであった場合は、カラム名の中に _key (主キーを示す疑
          似カラム名)が含まれていなければなりません。

          values 引数が省略された場合には、括弧の対応が取れるまで標準入力から values の値を読み取
          ります。引数として値を指定する場合は、文字列のエスケープが必要ですが、標準入力から与え
          る文字列はエスケープする必要がありません。

          続きの文字列については、空白文字(' ')をエスケープする必要はありません。

       table
          レコードを追加しようとするテーブルの名前を指定します。

       columns
          テーブルに登録するレコードに値を設定するカラム名のリストを、カンマ区切りで指定します。

       ifexists
          指定した主キーに対応するレコードが既にテーブルに登録済みであった場合に実行するscript形
          式の grn_expr 文字列を指定します。 ifexistsgrn_expr  が指定された場合は、式の値が真
          である場合に限り、その他のカラムの値が更新されます。(デフォルトはtrue)

       input_type
          入力形式を指定します。JSONのみに対応しています。

   使い方
       テーブルEntryにレコードを登録します。:

          load --table Entry --input_type json --values [{\"_key\":\"Groonga\",\"body\":\"It's very fast!!\"}]

          [1]

       標準入力からvaluesの値を与えます。:

          load --table Entry --input_type json
          [
          {"_key": "Groonga", "body": "It's very fast!!"}
          ]

          [1]

   戻り値
   JSON形式
          テーブルに登録されたレコードの件数が返されます。

              [NUMBER]

   参考
       /reference/grn_expr

   lock_acquire
   概要
       バージョン 5.1.2 で追加.

       lock_acquire  コマンドは対象オブジェクトのロックを獲得します。対象オブジェクトはデータベー
       ス、テーブル、カラムのどれかです。

       注釈:
          これは危険なコマンドです。獲得したロックはロックが必要なくなったときに lock_release  で
          解放してください。もし、解放し忘れるとデータベースが壊れるかもしれません。

   構文
       このコマンドの引数は1つで省略できます:

          lock_clear [target_name=null]

       target_name パラメーターを省略した場合は対象オブジェクトはデータベースになります。

   使い方
       以下はデータベースのロックを獲得する例です。

       実行例:

          lock_acquire
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       もし、データベースがロックされていると、新しいテーブル・カラムを作れなくなります。ここで
       は、他の例を示すためにデータベースのロックを解放します。

       実行例:

          lock_release
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       以下は Entries テーブルのロックを獲得する例です。

       実行例:

          table_create Entries TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          lock_acquire Entries
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       以下は Sites.title カラムのロックを獲得する例です。

       実行例:

          table_create Sites TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Sites title COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          lock_acquire Sites.title
          # [[0, 1337566253.89858, 0.000355720520019531], true]

   引数
       このセクションではすべての引数について説明します。

   target_name
       テーブル名またはカラム名を指定します。

       指定しなかったら対象オブジェクトはデータベースになります。

       デフォルト値はありません。これは対象オブジェクトはデータベースになるということです。

   戻り値
       lock_acquire コマンドはロックを獲得できたかどうかを返します。:

          [HEADER, SUCCEEDED_OR_NOT]

   HEADER
       HEADER については /reference/command/output_format を参照してください。

   SUCCEEDED_OR_NOT
       コマンドの実行が成功するとtrueを返します。失敗するとエラーとしてfalseを返します。

   参考
          · lock_release

          · lock_clear

   lock_clear
   概要
       バージョン 4.0.9 で追加.

       lock_clear  コマンドは対象オブジェクトのロックを再帰的に解除します。対象オブジェクトはデー
       タベース、テーブル、カラムのどれかです。

       注釈:
          これは危険なコマンドです。他のプロセスまたは他のスレッドが対象オブジェクトに書き込み処
          理を実行している間はこのコマンドを使ってはいけません。もし使ったなら、データベースは壊
          れるかもしれませんし、実行中のプロセスはクラッシュするかもしれません。

   構文
       このコマンドの引数は1つで省略できます:

          lock_clear [target_name=null]

       target_name   パラメーターを省略した場合は対象オブジェクトはデータベースになります。これは
       データベース中のすべてのロックを解除するという意味です。

   使い方
       以下はデータベースの中のすべてのロックを解除する例です。

       実行例:

          lock_clear
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       以下は Entries テーブルと Entries テーブルのカラムのロックを解除する例です。

       実行例:

          table_create Entries TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entries body COLUMN_SCALAR Text
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          lock_clear Entries
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       以下は Sites.title カラムのロックを解除する例です。

       実行例:

          table_create Sites TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Sites title COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          lock_clear Sites.title
          # [[0, 1337566253.89858, 0.000355720520019531], true]

   引数
       このセクションではすべての引数について説明します。

   target_name
       テーブル名またはカラム名を指定します。

       指定しなかったら対象オブジェクトはデータベースになります。

       デフォルト値はありません。これは対象オブジェクトはデータベースになるということです。

   戻り値
       lock_clear コマンドはロックを解除できたかどうかを返します。:

          [HEADER, SUCCEEDED_OR_NOT]

       HEADER
          HEADER については /reference/command/output_format を参照してください。

       SUCCEEDED_OR_NOT
          コマンドの実行が成功するとtrueを返します。失敗するとエラーとしてfalseを返します。

   lock_release
   概要
       バージョン 5.1.2 で追加.

       lock_release  コマンドは対象オブジェクトのロックを解放します。対象オブジェクトはデータベー
       ス、テーブル、カラムのどれかです。

       注釈:
          これは危険なコマンドです。  lock_acquire で獲得したロックだけを解放してください。もし、
          lock_acquire せずにロックを解放すると、データベースが壊れる可能性があります。

   構文
       このコマンドの引数は1つで省略できます:

          lock_clear [target_name=null]

       target_name パラメーターを省略した場合は対象オブジェクトはデータベースになります。

   使い方
       以下はデータベースのロックを解放する例です。

       実行例:

          lock_acquire
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          lock_release
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       以下は Entries テーブルのロックを解放する例です。

       実行例:

          table_create Entries TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          lock_acquire Entries
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          lock_release Entries
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       以下は Sites.title カラムのロックを解放する例です。

       実行例:

          table_create Sites TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Sites title COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          lock_acquire Sites.title
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          lock_release Sites.title
          # [[0, 1337566253.89858, 0.000355720520019531], true]

   引数
       このセクションではすべての引数について説明します。

   target_name
       テーブル名またはカラム名を指定します。

       指定しなかったら対象オブジェクトはデータベースになります。

       デフォルト値はありません。これは対象オブジェクトはデータベースになるということです。

   戻り値
       lock_release コマンドはロックを開放できたかどうかを返します。:

          [HEADER, SUCCEEDED_OR_NOT]

   HEADER
       HEADER については /reference/command/output_format を参照してください。

   SUCCEEDED_OR_NOT
       コマンドの実行が成功するとtrueを返します。失敗するとエラーとしてfalseを返します。

   参考
          · lock_acquire

          · lock_clear

   log_level
   概要
       log_level - ログ出力レベルの設定

       Groonga組込コマンドの一つであるlog_levelについて説明します。組込コマンドは、groonga実行
       ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することに
       よって実行します。

       log_levelは、ログ出力レベルを設定します。

   構文
          log_level level

   使い方
          log_level warning
          [true]

   引数
       level
          設定するログ出力レベルの値を以下のいずれかで指定します。
              EMERG ALERT CRIT error warning notice info debug

   戻り値
          [成功かどうかのフラグ]

       成功かどうかのフラグ
          エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。

   参考
       log_put log_reopen

   log_put
   概要
       log_put - ログ出力

       groonga組込コマンドの一つであるlog_putについて説明します。組込コマンドは、groonga実行ファ
       イルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって
       実行します。

       log_putは、ログにmessageを出力します。

   構文
          log_put level message

   使い方
          log_put ERROR ****MESSAGE****
          [true]

   引数
       level
          設定するログ出力レベルの値を以下のいずれかで指定します。
              EMERG ALERT CRIT error warning notice info debug

       message
          出力する文字列を指定します。

   戻り値
          [成功かどうかのフラグ]

       成功かどうかのフラグ
          エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。

   参考
       log_level log_reopen

   log_reopen
   概要
       log_reopen - ログファイルの再読み込み

       Groonga組込コマンドの一つであるlog_reopenについて説明します。組込コマンドは、groonga実行
       ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することに
       よって実行します。

       log_reopenは、ログファイルを再読み込みします。

       現在、デフォルトのログ関数を用いている場合のみに対応しています。

   構文
          log_reopen

   使い方
          log_reopen

          [true]

   log_reopenを用いたログのローテーション
       1. ログファイルをmvなどで移動する。 ログはmvで移動された先のファイルに書き込まれる。

       2. log_reopenコマンドを実行する。

       3. 既存のログファイル名と同じファイル名で、新たなログファイルが作成される。 今後のログは新
          たなログファイルに書き込まれる。

   引数
       ありません。

   戻り値
          [成功かどうかのフラグ]

       成功かどうかのフラグ
          エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。

   参考
       log_level log_put

   logical_count
   概要
       バージョン 5.0.0 で追加.

       logical_count は別のテーブルに保存されているレコードであっても、マッチするレコードをカウン
       トするためのコマンドです。テーブルの最大レコード数の /limitations を気にしなくてすむように
       なります。

       この機能はまだこなれていないので、いくつか制限があります。

       · 名前の末尾は  "_YYYYMMDD" をつけてテーブルを作成します。これは決め打ちになっていて、日ご
         とにテーブルを作成しないといけない

       · 自分で個々のテーブルへ適切なデータをロードしないといけない

   構文
       このコマンドにはたくさんの引数があります。

       必須引数は2つあります。 logical_tableshard_key です。

          logical_count logical_table
                        shard_key
                        [min]
                        [min_border]
                        [max]
                        [max_border]
                        [filter]

   使い方
       logical_count コマンドを使うには事前に sharding プラグインを登録します。

       logical_count コマンドは実験的なプラグインです。このコマンドは将来的に変更されるかもしれま
       せん。

       この機能を使う簡単な例を示します。複数のテーブルに保存されている特定のログをカウントしてみ
       ましょう。

       スキーマ定義とサンプルデータは以下の通りです。

       実行例:

          table_create Logs_20150203 TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20150203 timestamp COLUMN_SCALAR Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20150203 message COLUMN_SCALAR Text
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Logs_20150204 TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20150204 timestamp COLUMN_SCALAR Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20150204 message COLUMN_SCALAR Text
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Logs_20150205 TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20150205 timestamp COLUMN_SCALAR Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20150205 message COLUMN_SCALAR Text
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       実行例:

          load --table Logs_20150203
          [
          {"timestamp": "2015-02-03 23:59:58", "message": "Start"},
          {"timestamp": "2015-02-03 23:59:58", "message": "Shutdown"},
          {"timestamp": "2015-02-03 23:59:59", "message": "Start"},
          {"timestamp": "2015-02-03 23:59:59", "message": "Shutdown"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 4]
          load --table Logs_20150204
          [
          {"timestamp": "2015-02-04 00:00:00", "message": "Start"},
          {"timestamp": "2015-02-04 00:00:00", "message": "Shutdown"},
          {"timestamp": "2015-02-04 00:00:01", "message": "Start"},
          {"timestamp": "2015-02-04 00:00:01", "message": "Shutdown"},
          {"timestamp": "2015-02-04 23:59:59", "message": "Start"},
          {"timestamp": "2015-02-04 23:59:59", "message": "Shutdown"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 6]
          load --table Logs_20150205
          [
          {"timestamp": "2015-02-05 00:00:00", "message": "Start"},
          {"timestamp": "2015-02-05 00:00:00", "message": "Shutdown"},
          {"timestamp": "2015-02-05 00:00:01", "message": "Start"},
          {"timestamp": "2015-02-05 00:00:01", "message": "Shutdown"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 4]

       2015年の2月3日から5日までに対応したテーブルが3つあります。

       · Logs_20150203

       · Logs_20150204

       · Logs_20150205

       対応するテーブルへとデータを投入します。

       message カラムに "Shutdown" が含まれていて、 timestamp カラムの値が "2015-02-04  00:00:00"
       以降であるログをカウントしましょう。

       上記目的を達成するためのクエリがこちらです。

       実行例:

          logical_count Logs timestamp --filter 'message == "Shutdown"' --min "2015-02-04 00:00:00" --min_border "include"
          # [[0, 1337566253.89858, 0.000355720520019531], 5]

       レコード数には既知の制限があります。制限はテーブルごとなので、シャーディング機能によってそ
       の制限を乗り越えることができます。

       注釈:
          SQLの  PARTITIONING  BY  のような便利なクエリはありません。つまり、   table_create   で
          "_YYYYMMDD" を名前の末尾に含むテーブルをそれぞれの作らなければなりません。

   引数
       このセクションでは logical_count の引数について説明します。

   必須引数
       必須引数は二つあります。 logical_tableshard_key です。

   logical_table
       論理テーブル名を指定します。これは  "_YYYYMMDD" をテーブル名から除いたものです。実際のテー
       ブルが "Logs_20150203" や "Logs_20150203" といったものなら、論理テーブル名は "Logs" です。

   shard_key
       個々のテーブルで共通のキーとして扱うカラム名を指定します。

   省略可能引数
       いくつか省略可能な引数があります。

   min
       shard_key の最小値を指定します。

   min_border
       最小値を境界値として含めるのか否かを指定します。 include もしくは exclude を指定します。

   max
       shard_key の最大値を指定します。

   max_border
       最大値を境界値として含めるのか否かを指定します。 include もしくは exclude を指定します。

   filter
   戻り値
       TODO

          [HEADER, LOGICAL_COUNT]

   logical_parameters
   概要
       バージョン 5.0.6 で追加.

       logical_parameters はテスト用のコマンドです。通常はこのコマンドを使う必要はありません。

       logical_parameters は次の2つの機能を提供します。

          · logical_* コマンドが使うパラメーターの現在値を返します。

          · logical_* コマンドが使うパラメーターを新しく設定します。

       以下はパラメーターのリストです。

          · range_index

       注釈:
          これらのパラメーターの値は各スレッドごとで独立しています。(正確に言うと、 grn_ctx 毎に
          独立しています。)これらのパラメーターを完全に制御したい場合は、これらのパラメーターを
          使っている間は /reference/commands/thread_limit を使って最大スレッド数を 1 にしてくださ
          い。

   構文
       このコマンドの引数は1つで省略できます:

          logical_parameters [range_index=null]

   使い方
       このコマンドを使うには事前に sharding プラグインを登録します。

       実行例:

          plugin_register sharding
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       引数無しで呼び出すとすべてのパラメーターの現在の値を返します。

       実行例:

          logical_parameters
          # [[0, 1337566253.89858, 0.000355720520019531], {"range_index": "auto"}]

       引数を指定して呼び出すと新しい値を設定できます。

       実行例:

          logical_parameters --range_index never
          # [[0, 1337566253.89858, 0.000355720520019531], {"range_index": "auto"}]

       logical_parameters は、新しい値を設定するときは、新しい値を設定する前の値を返します。

   引数
       このセクションでは引数について説明します。

   必須引数
       必須の引数はありません。

   省略可能引数
       省略可能な引数が1つあります。

   range_index
       logical_range_filter でどのように範囲インデックスを使うかをキーワードで指定します。

       指定できるキーワードは以下の通りです。

          · auto (デフォルト)

          · always

          · never

       auto  を指定すると、効果がでそうなときだけ範囲インデックスを使います。これがデフォルトの値
       です。

       実行例:

          logical_parameters --range_index auto
          # [[0, 1337566253.89858, 0.000355720520019531], {"range_index": "never"}]

       always  を指定すると、常に範囲インデックスを使います。範囲インデックスが使われるケースをテ
       ストするときに便利です。

       実行例:

          logical_parameters --range_index always
          # [[0, 1337566253.89858, 0.000355720520019531], {"range_index": "auto"}]

       never を指定すると、範囲インデックスは使いません。範囲インデックスが使われないケースをテス
       トするときに便利です。

       実行例:

          logical_parameters --range_index never
          # [[0, 1337566253.89858, 0.000355720520019531], {"range_index": "always"}]

   戻り値
       このコマンドは logical_* コマンドが使うパラメーターの現在地を返します:

          [
            HEADER,
            {"range_index": HOW_TO_USE_RANGE_INDEX}
          ]

       HOW_TO_USE_RANGE_INDEX の値は次のどれかです。

          · "auto"

          · "always"

          · "never"

       HEADER については /reference/command/output_format を参照してください。

   logical_range_filter
   概要
       バージョン 5.0.0 で追加.

       TODO: Write summary

   構文
       このコマンドにはたくさんの引数があります。

       必須引数は2つあります。 logical_tableshard_key です。

          logical_range_filter
            logical_table
            shard_key
            [min=null]
            [min_border=null]
            [max=null]
            [max_border=null]
            [order=ascending]
            [filter=null]
            [offset=0]
            [limit=10]
            [output_columns=_key,*]
            [use_range_index=null]

       いくつか名前付き引数としてしか使えない引数があります。これらの引数を「○番目の引数」として
       使うことはできません。必ず名前を指定する必要があります。

       名前付き引数としてしか使えない引数は次の通りです。

          · cache=no

   使い方
       logical_range_filter コマンドを使うには事前に sharding プラグインを登録します。

       TODO: Add examples

   引数
       このセクションでは logical_range_filter の引数について説明します。

   必須引数
       必須引数は二つあります。 logical_tableshard_key です。

   logical_table
       論理テーブル名を指定します。これは  "_YYYYMMDD" をテーブル名から除いたものです。実際のテー
       ブルが "Logs_20150203" や "Logs_20150203" といったものなら、論理テーブル名は "Logs" です。

       TODO: Add examples

   shard_key
       個々のテーブルで共通のキーとして扱うカラム名を指定します。

       TODO: Add examples

   省略可能引数
       いくつか省略可能な引数があります。

   min
       shard_key の最小値を指定します。

       TODO: Add examples

   min_border
       最小値を境界値として含めるのか否かを指定します。 include もしくは exclude を指定します。

       TODO: Add examples

   max
       shard_key の最大値を指定します。

       TODO: Add examples

   max_border
       最大値を境界値として含めるのか否かを指定します。 include もしくは exclude を指定します。

       TODO: Add examples

   order
       TODO

   filter
       TODO

   offset
       TODO

   limit
       TODO

   output_columns
       TODO

   use_range_index
       range_indexを使うかどうかを指定します。ただし、この引数はテスト用なので、本番で使うべきで
       はありません。

       TODO: Add examples

   キャッシュ関連の引数
   cache
       このクエリーの結果をキャッシュするかどうかを指定します。

       このクエリーの結果がキャッシュしてあると、次に同じクエリーを実行するときはキャッシュを使っ
       て高速にレスポンスを返すことができます。

       これは既存のキャッシュされた結果を使うかどうかを指定するものではありません。

       指定可能な値は以下の通りです。

                               ┌──────┬──────────────────────────────────┐
                               │Value │ 説明                             │
                               ├──────┼──────────────────────────────────┤
                               │no    │ このクエリーの出力をキャッシュし │
                               │      │ ない。                           │
                               ├──────┼──────────────────────────────────┤
                               │yes   │ このクエリーの出力をキャッシュす │
                               │      │ る。デフォルト値。               │
                               └──────┴──────────────────────────────────┘

       TODO: Add examples

       デフォルト値は yes です。

   戻り値
       TODO

          [HEADER, LOGICAL_FILTERED]

   logical_select
   概要
       バージョン 5.0.5 で追加.

       logical_selectselect のシャーディングバージョンです。 logical_select  は複数のテーブル
       からレコードを検索し、マッチしたレコードを出力します。

       logical_selectsharding   プラグインに含まれているので、   sharding   プラグインを
       plugin_register する必要があります。

   構文
       このコマンドにはたくさんの引数があります。

       必須の引数は logical_tableshard_key です。それ以外の引数は省略可能です:

          logical_select logical_table
                         shard_key
                         [min=null]
                         [min_border="include"]
                         [max=null]
                         [max_border="include"]
                         [filter=null]
                         [sortby=null]
                         [output_columns="_id, _key, *"]
                         [offset=0]
                         [limit=10]
                         [drilldown=null]
                         [drilldown_sortby=null]
                         [drilldown_output_columns="_key, _nsubrecs"]
                         [drilldown_offset=0]
                         [drilldown_limit=10]
                         [drilldown_calc_types=NONE]
                         [drilldown_calc_target=null]

       logical_select には高度なドリルダウン機能のために以下の名前付き引数があります。

          · drilldown[${LABEL}].keys=null

          · drilldown[${LABEL}].sortby=null

          · drilldown[${LABEL}].output_columns="_key, _nsubrecs"

          · drilldown[${LABEL}].offset=0

          · drilldown[${LABEL}].limit=10

          · drilldown[${LABEL}].calc_types=NONE

          · drilldown[${LABEL}].calc_target=null

       ${LABEL}  には1つ以上のアルファベット、数字、  _.   を使うことができます。たとえば、
       parent.sub1 は有効な ${LABEL} です。

       同じ ${LABEL} も持つ引数は同じグループになります。

       たとえば、以下の引数は1つのドリルダウンを指定しています。

          · --drilldown[label].keys column

          · --drilldown[label].sortby -_nsubrecs

       以下の引数は2つのドリルダウンを指定しています。

          · --drilldown[label1].keys column1

          · --drilldown[label1].sortby -_nsubrecs

          · --drilldown[label2].keys column2

          · --drilldown[label2].sortby _key

   select との違い
       logical_select  の多くの機能は  select  の機能と対応しています。たとえば、引数名は同じです
       し、出力フォーマットも同じです。

       しかし、いくつか select と違うところもあります。

          · table 引数ではなく、 logical_tableshard_key 引数が必須です。

          · 複数のシャードを使った場合の sortby はサポートしていません。(1つのシャードのみを使っ
            た場合はサポートしています。)

          · 複数のシャードを使った場合、  drilldown[${LABEL}].sortby の中で _value.${KEY_NAME} を
            使えません。1つのシャードのみを使った場合は使えます。

          · match_columnsquery はまだサポートしていません。

          · cache はまだサポートしていません。

          · match_escalation_threshold はまだサポートしていません。

          · query_flags はまだサポートしていません。

          · query_expander はまだサポートしていません。

          · adjuster はまだサポートしていません。

   使い方
       例を使いながら logical_select の使い方を学びましょう。このセクションではよく使われる使い方
       を紹介します。

       logical_selectsharding プラグインに含まれているので sharding プラグインを登録する必要
       があります。

       実行例:

          plugin_register sharding
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       使い方を示すために使うスキーマ定義とサンプルデータは以下の通りです。

       実行例:

          table_create Entries_20150708 TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entries_20150708 created_at COLUMN_SCALAR Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entries_20150708 content COLUMN_SCALAR Text
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entries_20150708 n_likes COLUMN_SCALAR UInt32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entries_20150708 tag COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Entries_20150709 TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entries_20150709 created_at COLUMN_SCALAR Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entries_20150709 content COLUMN_SCALAR Text
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entries_20150709 n_likes COLUMN_SCALAR UInt32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entries_20150709 tag COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Terms TABLE_PAT_KEY ShortText \
            --default_tokenizer TokenBigram \
            --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Terms entries_key_index_20150708 \
            COLUMN_INDEX|WITH_POSITION Entries_20150708 _key
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Terms entries_content_index_20150708 \
            COLUMN_INDEX|WITH_POSITION Entries_20150708 content
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Terms entries_key_index_20150709 \
            COLUMN_INDEX|WITH_POSITION Entries_20150709 _key
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Terms entries_content_index_20150709 \
            COLUMN_INDEX|WITH_POSITION Entries_20150709 content
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Entries_20150708
          [
          {"_key":       "The first post!",
           "created_at": "2015/07/08 00:00:00",
           "content":    "Welcome! This is my first post!",
           "n_likes":    5,
           "tag":        "Hello"},
          {"_key":       "Groonga",
           "created_at": "2015/07/08 01:00:00",
           "content":    "I started to use Groonga. It's very fast!",
           "n_likes":    10,
           "tag":        "Groonga"},
          {"_key":       "Mroonga",
           "created_at": "2015/07/08 02:00:00",
           "content":    "I also started to use Mroonga. It's also very fast! Really fast!",
           "n_likes":    15,
           "tag":        "Groonga"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]
          load --table Entries_20150709
          [
          {"_key":       "Good-bye Senna",
           "created_at": "2015/07/09 00:00:00",
           "content":    "I migrated all Senna system!",
           "n_likes":    3,
           "tag":        "Senna"},
          {"_key":       "Good-bye Tritonn",
           "created_at": "2015/07/09 01:00:00",
           "content":    "I also migrated all Tritonn system!",
           "n_likes":    3,
           "tag":        "Senna"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 2]

       ブログエントリー用に Entries_20150708Entries_20150709 の2つのテーブルがあります。

       注釈:
          テーブル名には ${論理テーブル名}_${YYYYMMDD} という命名規則を使う必要があります。この例
          では、 論理テーブル名EntriesYYYYMMDD20150708 または 20150709 です。

       各エントリはタイトルと作成日時と内容と「いいね!」数、タグを持っています。タイトルは
       Entries_YYYYMMDD のキーとします。作成日時は  Entries_YYYYMMDD.created_at  カラムの値としま
       す。内容は          Entries_YYYYMMDD.content          カラムの値とします。「いいね!」数は
       Entries_YYYYMMDD.n_likes カラムの値とします。タグは Entries_YYYYMMDD.tag  カラムの値としま
       す。

       Entries_YYYYMMDD._key  カラムと Entries_YYYYMMDD.content カラムには TokenBigram トークナイ
       ザーを使ったインデックスを作成します。そのため、         Entries_YYYYMMDD._keyEntries_YYYYMMDD.content は両方とも全文検索できます。

       これで例を示すためのスキーマとデータの準備ができました。

   簡単な使い方
       TODO

   引数
       このセクションでは logical_select の引数について説明します。

   必須引数
       必須引数は二つあります。 logical_tableshard_key です。

   logical_table
       論理テーブル名を指定します。これは  _YYYYMMDD をテーブル名からのぞいたものです。実際のテー
       ブルが Entries_20150708Entries_20150709 といったものなら、論理テーブル名は Entries  で
       す。

       logical_tableshard_key 引数を指定すると10レコード表示できます。これらの引数は必須の引
       数です。

       実行例:

          logical_select --logical_table Entries --shard_key created_at
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "created_at",
          #           "Time"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         1436281200.0,
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         1436284800.0,
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         1436288400.0,
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         1,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         1436367600.0,
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         2,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         1436371200.0,
          #         3,
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

       存在しないテーブルを指定するとエラーが返ります。

       実行例:

          logical_select --logical_table Nonexistent --shard_key created_at
          # [
          #   [
          #     -22,
          #     1337566253.89858,
          #     0.000355720520019531,
          #     "[logical_select] no shard exists: logical_table: <Nonexistent>: shard_key: <created_at>",
          #     [
          #       [
          #         "Groonga::Context.set_groonga_error",
          #         "lib/mrb/scripts/context.rb",
          #         27
          #       ]
          #     ]
          #   ]
          # ]

   shard_key
       シャードキーとして使うカラム名を指定します。シャードキーは適切なシャードへレコードを分配す
       るために使う値を保存しているカラムです。

       今のところ、シャードキーは Time 型でなければいけません。

       shard_key の指定方法は logical_table を見てください。

   省略可能引数
       いくつか省略可能な引数があります。

   min
       shard_key カラムの最小値を指定します。シャードにマッチするレコードがない場合は、そのシャー
       ドは検索対象外になります。

       たとえば、 min"2015/07/09 00:00:00" なら、 Entry_20150708 は検索対象外です。なぜなら、
       Entry_20150708"2015/07/08" のレコードしかないからです。

       以下の例は Entry_20150709 テーブルだけを使う例です。 Entry_20150708 は使われません。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --min "2015/07/09 00:00:00"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "created_at",
          #           "Time"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         1436367600.0,
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         2,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         1436371200.0,
          #         3,
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

   min_border
       最小値を含めるかどうかを指定します。指定可能な値は次の通りです。

                              ┌────────┬──────────────────────────────────┐
                              │Value   │ 説明                             │
                              ├────────┼──────────────────────────────────┤
                              │includemin の値を含みます。これがデフォ │
                              │        │ ルト値です。                     │
                              ├────────┼──────────────────────────────────┤
                              │excludemin の値を含みません。           │
                              └────────┴──────────────────────────────────┘

       次の例は exclude の使用例です。結果には  "Good-bye  Senna"  レコードは含まれません。このレ
       コードの created_at の値が "2015/07/09 00:00:00" だからです。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --min "2015/07/09 00:00:00" \
            --min_border "exclude"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "created_at",
          #           "Time"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         1436371200.0,
          #         3,
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

   max
       shard_key カラムの最大値を指定します。シャードにマッチするレコードがない場合、そのシャード
       は検索対象外になります。

       たとえば、 max"2015/07/08  23:59:59"  なら  Entry_20150709  は検索対象外です。なぜなら
       Entry_20150709 には ""2015/07/09" のレコードしかないからです。

       以下の例は Entry_20150708 テーブルだけを使います。 Entry_20150709 は使いません。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --max "2015/07/08 23:59:59"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "created_at",
          #           "Time"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         1436281200.0,
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         1436284800.0,
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         1436288400.0,
          #         15,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]

   max_border
       最大値を含めるかどうかを指定します。指定可能な値は次の通りです。

                              ┌────────┬──────────────────────────────────┐
                              │Value   │ 説明                             │
                              ├────────┼──────────────────────────────────┤
                              │includemax の値を含みます。これがデフォ │
                              │        │ ルト値です。                     │
                              ├────────┼──────────────────────────────────┤
                              │excludemax の値を含みません。           │
                              └────────┴──────────────────────────────────┘

       次の例は exclude の使用例です。結果には  "Good-bye  Senna"  レコードは含まれません。このレ
       コードの created_at の値が "2015/07/09 00:00:00" だからです。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --max "2015/07/09 00:00:00" \
            --max_border "exclude"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "created_at",
          #           "Time"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         1436281200.0,
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         1436284800.0,
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         1436288400.0,
          #         15,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]

   検索関係の引数
       logical_selectselect 互換の検索関連パラメーターをサポートしています。

       match_columnsquery はまだサポートしていません。今のところ、 filter だけサポートしてい
       ます。

   match_columns
       未実装です。

   query
       未実装です。

   filter
       select の select-filter に対応しています。詳細は select-filter を見てください。

       以下は例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --filter "n_likes <= 5"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "created_at",
          #           "Time"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         1436281200.0,
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         1,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         1436367600.0,
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         2,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         1436371200.0,
          #         3,
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

   高度な検索のための引数
       logical_select は高度な検索パラメーターをまだ実装していません。

   match_escalation_threshold
       未実装です。

   query_flags
       未実装です。

   query_expander
       未実装です。

   出力関連の引数
   output_columns
       select の select-output-columns に対応しています。詳細は select-output-columns  を見てくだ
       さい。

       以下は例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --output_columns '_key, *'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "created_at",
          #           "Time"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         1436281200.0,
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         1436284800.0,
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         1436288400.0,
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         1436367600.0,
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         1436371200.0,
          #         3,
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

   sortby
       select の select-sortby に対応しています。詳細は select-sortby を見てください。

       sortby   には制限があります。検索対象のシャードが1つの場合のみ動作します。もし、検索対象の
       シャードが複数ある場合、 sortby は正常な動作をしません。

       以下は1つのシャードのみを使っている例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --min "2015/07/08 00:00:00" \
            --min_border "include" \
            --max "2015/07/09 00:00:00" \
            --max_border "exclude" \
            --sortby _key
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "created_at",
          #           "Time"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         1436284800.0,
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         1436288400.0,
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         1436281200.0,
          #         5,
          #         "Hello"
          #       ]
          #     ]
          #   ]
          # ]

   offset
       select の select-offset に対応しています。詳細は select-offset を見てください。

       以下は例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --offset 2
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "created_at",
          #           "Time"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         1436288400.0,
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         1,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         1436367600.0,
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         2,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         1436371200.0,
          #         3,
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

   limit
       select の select-limit に対応しています。詳細は select-limit を見てください。

       以下は例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --limit 2
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "created_at",
          #           "Time"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         1436281200.0,
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         1436284800.0,
          #         10,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]

   scorer
       未実装です。

   ドリルダウン関連の引数
       select                  のすべてのドリルダウン関連パラメーターをサポートしています。詳細は
       select-drilldown-related-parameters を見てください。

   drilldown
       select の select-drilldown に対応しています。詳細は select-drilldown を見てください。

       以下は例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --output_columns _key,tag \
            --drilldown tag
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "The first post!",
          #         "Hello"
          #       ],
          #       [
          #         "Groonga",
          #         "Groonga"
          #       ],
          #       [
          #         "Mroonga",
          #         "Groonga"
          #       ],
          #       [
          #         "Good-bye Senna",
          #         "Senna"
          #       ],
          #       [
          #         "Good-bye Tritonn",
          #         "Senna"
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Hello",
          #         1
          #       ],
          #       [
          #         "Groonga",
          #         2
          #       ],
          #       [
          #         "Senna",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

   drilldown_sortby
       select  の select-drilldown-sortby に対応しています。詳細は select-drilldown-sortby を見て
       ください。

       以下は例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --limit 0 \
            --output_columns _id \
            --drilldown tag \
            --drilldown_sortby -_nsubrecs,_key
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Groonga",
          #         2
          #       ],
          #       [
          #         "Senna",
          #         2
          #       ],
          #       [
          #         "Hello",
          #         1
          #       ]
          #     ]
          #   ]
          # ]

   drilldown_output_columns
       select         の         select-drilldown-output-columns         に対応しています。詳細は
       select-drilldown-output-columns を見てください。

       以下は例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --limit 0 \
            --output_columns _id \
            --drilldown tag \
            --drilldown_output_columns _key
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "Hello"
          #       ],
          #       [
          #         "Groonga"
          #       ],
          #       [
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

   drilldown_offset
       select  の select-drilldown-offset に対応しています。詳細は select-drilldown-offset を見て
       ください。

       以下は例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --limit 0 \
            --output_columns _id \
            --drilldown tag \
            --drilldown_offset 1
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Groonga",
          #         2
          #       ],
          #       [
          #         "Senna",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

   drilldown_limit
       select の select-drilldown-limit に対応しています。詳細は select-drilldown-limit  を見てく
       ださい。

       以下は例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --limit 0 \
            --output_columns _id \
            --drilldown tag \
            --drilldown_limit 2
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Hello",
          #         1
          #       ],
          #       [
          #         "Groonga",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

   drilldown_calc_types
       select の select-drilldown-calc-types に対応しています。詳細は select-drilldown-calc-types
       を見てください。

       以下は例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --limit -1 \
            --output_columns tag,n_likes \
            --drilldown tag \
            --drilldown_calc_types MAX,MIN,SUM,AVG \
            --drilldown_calc_target n_likes \
            --drilldown_output_columns _key,_nsubrecs,_max,_min,_sum,_avg
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "tag",
          #           "ShortText"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ]
          #       ],
          #       [
          #         "Hello",
          #         5
          #       ],
          #       [
          #         "Groonga",
          #         10
          #       ],
          #       [
          #         "Groonga",
          #         15
          #       ],
          #       [
          #         "Senna",
          #         3
          #       ],
          #       [
          #         "Senna",
          #         3
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ],
          #         [
          #           "_max",
          #           "Int64"
          #         ],
          #         [
          #           "_min",
          #           "Int64"
          #         ],
          #         [
          #           "_sum",
          #           "Int64"
          #         ],
          #         [
          #           "_avg",
          #           "Float"
          #         ]
          #       ],
          #       [
          #         "Hello",
          #         1,
          #         5,
          #         5,
          #         5,
          #         5.0
          #       ],
          #       [
          #         "Groonga",
          #         2,
          #         15,
          #         10,
          #         25,
          #         12.5
          #       ],
          #       [
          #         "Senna",
          #         2,
          #         3,
          #         3,
          #         6,
          #         3.0
          #       ]
          #     ]
          #   ]
          # ]

   drilldown_calc_target
       select          の          select-drilldown-calc-target          に対応しています。詳細は
       select-drilldown-calc-target を見てください。

       具体例は select-drilldown-calc-types を見てください。

   高度なドリルダウン関連のパラメーター
       select          のすべての高度なドリルダウン関連のパラメーターをサポートしています。詳細は
       select-advanced-drilldown-related-parameters を見てください。

       いくつか制限があります。

          · 複数のシャードを使った場合、 drilldown[${LABEL}].sortby の中で _value.${KEY_NAME}  を
            使えません。1つのシャードのみを使った場合は使えます。

   drilldown[${LABEL}].keys
       select の select-drilldown-label-keys に対応しています。詳細は select-drilldown-label-keys
       を見てください。

       以下は例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --limit 0 \
            --output_columns _id \
            --drilldown[tag.n_likes].keys tag,n_likes \
            --drilldown[tag.n_likes].output_columns _value.tag,_value.n_likes,_nsubrecs
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ]
          #       ]
          #     ],
          #     {
          #       "tag.n_likes": [
          #         [
          #           4
          #         ],
          #         [
          #           [
          #             "tag",
          #             "ShortText"
          #           ],
          #           [
          #             "n_likes",
          #             "UInt32"
          #           ],
          #           [
          #             "_nsubrecs",
          #             "Int32"
          #           ]
          #         ],
          #         [
          #           "Hello",
          #           5,
          #           1
          #         ],
          #         [
          #           "Groonga",
          #           10,
          #           1
          #         ],
          #         [
          #           "Groonga",
          #           15,
          #           1
          #         ],
          #         [
          #           "Senna",
          #           3,
          #           2
          #         ]
          #       ]
          #     }
          #   ]
          # ]

   drilldown[${LABEL}].output_columns
       select       の       select-drilldown-label-output-columns       に対応しています。詳細は
       select-drilldown-label-output-columns を見てください。

       以下は例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --limit 0 \
            --output_columns _id \
            --drilldown[tag].keys tag \
            --drilldown[tag].output_columns _key,_nsubrecs
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ]
          #       ]
          #     ],
          #     {
          #       "tag": [
          #         [
          #           3
          #         ],
          #         [
          #           [
          #             "_key",
          #             "ShortText"
          #           ],
          #           [
          #             "_nsubrecs",
          #             "Int32"
          #           ]
          #         ],
          #         [
          #           "Hello",
          #           1
          #         ],
          #         [
          #           "Groonga",
          #           2
          #         ],
          #         [
          #           "Senna",
          #           2
          #         ]
          #       ]
          #     }
          #   ]
          # ]

   drilldown[${LABEL}].sortby
       ラベルなしドリルダウンの drilldown_sortby に対応しています。

       drilldown[${LABEL}].sortby には制限があります。

       複数のシャードを使った場合、 drilldown[${LABEL}].sortby の中で _value.${KEY_NAME} を使えま
       せん。1つのシャードのみを使った場合は使えます。

       以下は1つのシャードに対して _value.${KEY_NAME} を使う例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --min "2015/07/08 00:00:00" \
            --min_border "include" \
            --max "2015/07/09 00:00:00" \
            --max_border "exclude" \
            --limit 0 \
            --output_columns _id \
            --drilldown[tag.n_likes].keys tag,n_likes \
            --drilldown[tag.n_likes].output_columns _nsubrecs,_value.n_likes,_value.tag \
            --drilldown[tag.n_likes].sortby -_nsubrecs,_value.n_likes,_value.tag
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ]
          #       ]
          #     ],
          #     {
          #       "tag.n_likes": [
          #         [
          #           3
          #         ],
          #         [
          #           [
          #             "_nsubrecs",
          #             "Int32"
          #           ],
          #           [
          #             "n_likes",
          #             "UInt32"
          #           ],
          #           [
          #             "tag",
          #             "ShortText"
          #           ]
          #         ],
          #         [
          #           1,
          #           5,
          #           "Hello"
          #         ],
          #         [
          #           1,
          #           10,
          #           "Groonga"
          #         ],
          #         [
          #           1,
          #           15,
          #           "Groonga"
          #         ]
          #       ]
          #     }
          #   ]
          # ]

   drilldown[${LABEL}].offset
       ラベルなしドリルダウンの drilldown_offset に対応しています。

       以下は例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --limit 0 \
            --output_columns _id \
            --drilldown[tag.n_likes].keys tag \
            --drilldown[tag.n_likes].offset 1
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ]
          #       ]
          #     ],
          #     {
          #       "tag.n_likes": [
          #         [
          #           3
          #         ],
          #         [
          #           [
          #             "_key",
          #             "ShortText"
          #           ],
          #           [
          #             "_nsubrecs",
          #             "Int32"
          #           ]
          #         ],
          #         [
          #           "Groonga",
          #           2
          #         ],
          #         [
          #           "Senna",
          #           2
          #         ]
          #       ]
          #     }
          #   ]
          # ]

   drilldown[${LABEL}].limit
       ラベルなしドリルダウンの drilldown_limit に対応しています。

       以下は例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --limit 0 \
            --output_columns _id \
            --drilldown[tag.n_likes].keys tag \
            --drilldown[tag.n_likes].limit 2
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ]
          #       ]
          #     ],
          #     {
          #       "tag.n_likes": [
          #         [
          #           3
          #         ],
          #         [
          #           [
          #             "_key",
          #             "ShortText"
          #           ],
          #           [
          #             "_nsubrecs",
          #             "Int32"
          #           ]
          #         ],
          #         [
          #           "Hello",
          #           1
          #         ],
          #         [
          #           "Groonga",
          #           2
          #         ]
          #       ]
          #     }
          #   ]
          # ]

   drilldown[${LABEL}].calc_types
       ラベルなしドリルダウンの drilldown_calc_types に対応しています。

       以下は例です。

       実行例:

          logical_select \
            --logical_table Entries \
            --shard_key created_at \
            --limit 0 \
            --output_columns _id \
            --drilldown[tag].keys tag \
            --drilldown[tag].calc_types MAX,MIN,SUM,AVG \
            --drilldown[tag].calc_target n_likes \
            --drilldown[tag].output_columns _key,_nsubrecs,_max,_min,_sum,_avg
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ]
          #       ]
          #     ],
          #     {
          #       "tag": [
          #         [
          #           3
          #         ],
          #         [
          #           [
          #             "_key",
          #             "ShortText"
          #           ],
          #           [
          #             "_nsubrecs",
          #             "Int32"
          #           ],
          #           [
          #             "_max",
          #             "Int64"
          #           ],
          #           [
          #             "_min",
          #             "Int64"
          #           ],
          #           [
          #             "_sum",
          #             "Int64"
          #           ],
          #           [
          #             "_avg",
          #             "Float"
          #           ]
          #         ],
          #         [
          #           "Hello",
          #           1,
          #           5,
          #           5,
          #           5,
          #           5.0
          #         ],
          #         [
          #           "Groonga",
          #           2,
          #           15,
          #           10,
          #           25,
          #           12.5
          #         ],
          #         [
          #           "Senna",
          #           2,
          #           3,
          #           3,
          #           6,
          #           3.0
          #         ]
          #       ]
          #     }
          #   ]
          # ]

   drilldown[${LABEL}].calc_target
       ラベルなしドリルダウンの drilldown_calc_target に対応しています。

       例は drilldown[${LABEL}].calc_types を参照してください。

   戻り値
       logical_select の戻り値のフォーマットは select と同じです。詳細は select-return-value を見
       てください。

   logical_shard_list
   概要
       バージョン 5.0.7 で追加.

       logical_shard_list は指定した論理テーブル名に対するすべてのシャード名を返します。

   構文
       このコマンドの引数は1つで必須です:

          logical_shard_list logical_table

   使い方
       このコマンドを使うには事前に sharding プラグインを登録します。

       実行例:

          plugin_register sharding
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       サンプルシャードは次の通りです。

       実行例:

          table_create  Logs_20150801           TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20150801 timestamp COLUMN_SCALAR  Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create  Logs_20150802           TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20150802 timestamp COLUMN_SCALAR  Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create  Logs_20150930           TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20150930 timestamp COLUMN_SCALAR  Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       論理テーブル名として Logs を指定すると昇順ですべてのシャード名を取得できます。

       実行例:

          logical_shard_list --logical_table Logs
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     {
          #       "name": "Logs_20150801"
          #     },
          #     {
          #       "name": "Logs_20150802"
          #     },
          #     {
          #       "name": "Logs_20150930"
          #     }
          #   ]
          # ]

   引数
       このセクションでは引数について説明します。

   必須引数
       必須の引数が1つあります。

   logical_table
       論理テーブル名を指定します。 logical_shard_list は指定した論理テーブルのシャード名のリスト
       を返します。

       実行例:

          logical_shard_list --logical_table Logs
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     {
          #       "name": "Logs_20150801"
          #     },
          #     {
          #       "name": "Logs_20150802"
          #     },
          #     {
          #       "name": "Logs_20150930"
          #     }
          #   ]
          # ]

       このリストは昇順でソート済みです。

   省略可能引数
       省略可能な引数はありません。

   戻り値
       このコマンドは昇順でソートしたシャード名のリストを返します:

          [
            HEADER,
            [
              {"name": "SHARD_NAME_1"},
              {"name": "SHARD_NAME_2"},
              ...
              {"name": "SHARD_NAME_N"}
            ]
          ]

       HEADER については /reference/command/output_format を参照してください。

   参考
          · /reference/sharding

   logical_table_remove
   概要
       バージョン 5.0.5 で追加.

       logical_table_remove  は指定した論理テーブルのテーブルとそのカラムを削除します。もし、テー
       ブルのキーあるいはそのテーブルのカラムにインデックスが張ってある場合はそれらも削除します。

       シャードの一部を指定すると、そのシャードのテーブルは削除しません。テーブル内のレコードを削
       除するだけです。

       例えば、テーブル内に以下のレコードがあるとします。

          · レコード1: 2016-03-18 00:30:00

          · レコード2: 2016-03-18 01:00:00

          · レコード3: 2016-03-18 02:00:00

       範囲として 2016-03-18 00:00:00 から 2016-03-18 01:30:00  までを指定すると、「レコード1」と
       「レコード2」を削除します。「レコード3」は削除しません。テーブルも削除しません。

       バージョン  6.0.1 で追加: dependent パラメーターを使うと、対象テーブルを参照しているテーブ
       ル・カラムと対象シャードに関連しているテーブルも一緒に削除できます。

   構文
       このコマンドにはたくさんの引数があります。

       必須引数は2つあります。 logical_tableshard_key です。

          logical_table_remove logical_table
                               shard_key
                               [min=null]
                               [min_border="include"]
                               [max=null]
                               [max_border="include"]
                               [dependent=no]

   使い方
       削除したい論理テーブル名とシャードキーを指定します。

       このセクションでは次のことについて説明します。

          · 基本的な使い方

          · 論理テーブルの一部を削除

          · 削除できないケース

          · 関連するテーブルと一緒に削除

          · 利用リソースの削減

   基本的な使い方
       この コマンドを使うには事前に sharding プラグインを登録します。

       実行例:

          register sharding
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       logical_tableshard_key  だけを指定することで対象論理テーブル用のすべてのテーブルを削除
       できます。

       以下は2つのシャードを作成するコマンドです。

       実行例:

          table_create  Logs_20160318 TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20160318 timestamp COLUMN_SCALAR Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create  Logs_20160319 TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20160319 timestamp COLUMN_SCALAR Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       存在するシャードは logical_shard_list で確認できます。

       実行例:

          logical_shard_list --logical_table Logs
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     {
          #       "name": "Logs_20160318"
          #     },
          #     {
          #       "name": "Logs_20160319"
          #     }
          #   ]
          # ]

       すべてのシャードを削除できます。

       実行例:

          logical_table_remove \
            --logical_table Logs \
            --shard_key timestamp
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       すべてのシャードを削除した後はシャードは存在しません。

       実行例:

          logical_shard_list --logical_table Logs
          # [[0, 1337566253.89858, 0.000355720520019531], []]

   論理テーブルの一部を削除
       次のパラメーターでシャードの範囲を指定できます。

          · min

          · min_border

          · max

          · max_border

       各パラメーターについては logical_select の以下のドキュメントを参照してください。

          · logical-select-min

          · logical-select-min-border

          · logical-select-max

          · logical-select-max-border

       指定した範囲がシャード内のすべてのレコードを含んでいなかったら、そのシャードのテーブルは削
       除しません。テーブル内の対象レコードのみ削除します。

       指定した範囲がシャード内のすべてのレコードを含んでいれば、そのシャード用のテーブルを削除し
       ます。

       以下はこの挙動を示すための論理テーブルです。この論理テーブルには2つのシャードがあります。

       実行例:

          table_create  Logs_20160318 TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20160318 timestamp COLUMN_SCALAR Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Logs_20160318
          [
          {"timestamp": "2016-03-18 00:30:00"},
          {"timestamp": "2016-03-18 01:00:00"},
          {"timestamp": "2016-03-18 02:00:00"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]
          table_create  Logs_20160319 TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20160319 timestamp COLUMN_SCALAR Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Logs_20160319
          [
          {"timestamp": "2016-03-19 00:30:00"},
          {"timestamp": "2016-03-19 01:00:00"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 2]

       Logs_20160318 テーブルには次のレコードがあります。

          · レコード1: "2016-03-18 00:30:00"

          · レコード2: "2016-03-18 01:00:00"

          · レコード3: "2016-03-18 02:00:00"

       Logs_20160319 テーブルには次のレコードがあります。

          · レコード1: "2016-03-19 00:30:00"

          · レコード2: "2016-03-19 01:00:00"

       次の範囲は  Logs_20160318 テーブル内の「レコード1」を含んでいませんが、 Logs_20160319 テー
       ブルのすべてのレコードを含んでいます。

                                 ┌─────────────┬───────────────────────┐
                                 │パラメーター │ Value                 │
                                 ├─────────────┼───────────────────────┤
                                 │min"2016-03-18 01:00:00" │
                                 ├─────────────┼───────────────────────┤
                                 │min_border"include"             │
                                 ├─────────────┼───────────────────────┤
                                 │max"2016-03-19 01:30:00" │
                                 ├─────────────┼───────────────────────┤
                                 │max_border"include"             │
                                 └─────────────┴───────────────────────┘

       この範囲を指定した logical_table_removeLogs_20160318 テーブルの「レコード2」と「レコー
       ド3」を削除します。しかし、 Logs_20160318 テーブルは削除しません。なぜなら、 Logs_20160318
       テーブルには「レコード1」があるからです。

       この範囲を指定した  logical_table_removeLogs_20160319   テーブルを削除します。なぜな
       ら、この範囲は Logs_20160319 テーブルのすべてのレコードを含んでいるからです。

       この範囲を指定した logical_table_remove を使う例です。

       実行例:

          logical_table_remove \
            --logical_table Logs \
            --shard_key timestamp \
            --min "2016-03-18 01:00:00" \
            --min_border "include" \
            --max "2016-03-19 01:30:00" \
            --max_border "include"
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       dump を使うと Logs_20160318 テーブルに「レコード1」があることを確認できます。

       実行例:

          dump
          # plugin_register sharding
          #
          # table_create Logs_20160318 TABLE_NO_KEY
          # column_create Logs_20160318 timestamp COLUMN_SCALAR Time
          #
          # load --table Logs_20160318
          # [
          # ["_id","timestamp"],
          # [1,1458228600.0]
          # ]

   削除できないケース
       いくつか削除できない場合があります。詳細は table-remove-unremovable-cases を参照してくださ
       い。なぜなら logical_table_remove も同じようにチェックしているからです。

   関連するテーブルと一緒に削除
       バージョン 6.0.1 で追加.

       もし、自分がなにをしようとしているかちゃんと理解しているのであれば、 --dependent yes  パラ
       メーターを使うことで1回の  logical_table_remove で対象シャードに依存しているテーブルとカラ
       ムも削除することができます。

       以下が依存していると判断する条件です。もし、テーブル・カラムがこれらの条件のどれか1つでも
       満たしていてれば、そのテーブル・カラムは対象シャードに依存しています。

          · 対象シャードを参照しているテーブル・カラム

          · 対象シャード用のテーブル(= 名前の末尾が対象シャードと同じ _YYYYMMDD で、対象シャード
            が参照しているテーブル)

       対象シャードを参照しているテーブル・カラムが1つ以上あれば、 logical_table_remove  は失敗し
       ます。これは、参照先がなくなることを防ぐためです。

       以下の Bookmarks.log_20160320 カラムは対象シャードを参照しています。

       実行例:

          table_create  Logs_20160320 TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20160320 timestamp COLUMN_SCALAR Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Bookmarks TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Bookmarks log_20160320 COLUMN_SCALAR Logs_20160320
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       デフォルトでは logical_table_removeLogs_20160320 を削除できません。

       実行例:

          logical_table_remove \
            --logical_table Logs \
            --shard_key timestamp
          # [
          #   [
          #     -2,
          #     1337566253.89858,
          #     0.000355720520019531,
          #     "operation not permitted: <[table][remove] a column that references the table exists: <Bookmarks.log_20160320> -> <Logs_20160320",
          #     [
          #       [
          #         "Groonga::Sharding::LogicalTableRemoveCommand.remove_table",
          #         "/home/kou/work/c/groonga.clean/plugins/sharding/logical_table_remove.rb",
          #         80
          #       ]
          #     ]
          #   ]
          # ]

       --dependent  yes  パラメーター付きの  logical_table_remove では Logs_20160320 を削除できま
       す。 Bookmarks.log_20160320 も一緒に削除します。

       実行例:

          logical_table_remove \
            --logical_table Logs \
            --shard_key timestamp \
            --dependent yes
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       object_existLogs_20160320 テーブルと Bookmarks.log_20160320 カラムが削除されていること
       を確認できます。

       実行例:

          object_exist Logs_20160320
          # [[0, 1337566253.89858, 0.000355720520019531], false]
          object_exist Bookmarks.log_20160320
          # [[0, 1337566253.89858, 0.000355720520019531], false]

       対象シャード用のテーブルが1つ以上ある場合、 --dependent yes 付きの logical_table_remove は
       それらも一緒に削除します。 対象シャード用のテーブルかどうかは対象シャードと同じ  _YYYYMMDD
       がテーブル名の末尾にあるかどうかで判断します。

       末尾が  _20160320  のテーブルは2つあります。  NotRelated_20160320 テーブルは Logs_20160320
       テーブルから使われていません。 Users_20160320 テーブルは Logs_20160320  テーブルが使ってい
       ます。 Servers テーブルもあり、これは Logs_20160320 テーブルが使っています。

       実行例:

          table_create  NotRelated_20160320 TABLE_PAT_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create  Users_20160320 TABLE_PAT_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create  Servers TABLE_PAT_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create  Logs_20160320 TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20160320 timestamp COLUMN_SCALAR Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20160320 user COLUMN_SCALAR Users_20160320
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs_20160320 server COLUMN_SCALAR Servers
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       --dependent  yes  パラメーター付きの``logical_table_remove``  は  Logs_20160320 テーブルと
       Users_20160320  テーブルだけ削除します。なぜなら、  Users_20160320  テーブルは名前の末尾が
       _20160320 で、 Logs_20160320 テーブルが使っているからです。 NotRelated_20160320 テーブルと
       Servers テーブルは削除しません。なぜなら、 NotRelated_20160320 は名前の末尾が _20160320 で
       すが、  Logs_20160320  テーブルは使っていないからです。  Servers  テーブルは Logs_20160320
       テーブルが使っていますが、名前の末尾は _20160320 ではありません。

       実行例:

          logical_table_remove \
            --logical_table Logs \
            --shard_key timestamp \
            --dependent yes
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       Logs_20160320  テーブルと  Users_20160320  テーブルは削除されていて、  NotRelated_20160320
       テーブルと Servers テーブルは削除されていないことを確認します。

       実行例:

          object_exist Logs_20160320
          # [[0, 1337566253.89858, 0.000355720520019531], false]
          object_exist Users_20160320
          # [[0, 1337566253.89858, 0.000355720520019531], false]
          object_exist NotRelated_20160320
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          object_exist Servers
          # [[0, 1337566253.89858, 0.000355720520019531], true]

   利用リソースの削減
       このコマンドが使うリソースを削減できます。詳細は  table-remove-decreases-used-resources を
       参照してください。なぜなら logical_table_removetable_remove と同じロジックを使っている
       からです。

   引数
       このセクションでは logical_table_remove の引数について説明します。

   必須引数
       いくつか必須の引数があります。

   logical_table
       論理テーブル名を指定します。これは  "_YYYYMMDD" をテーブル名から除いたものです。実際のテー
       ブルが "Logs_20150203" や "Logs_20150203" といったものなら、論理テーブル名は "Logs" です。

       logical-select-logical-table も参照してください。

   shard_key
       シャードキーとして使うカラム名を指定します。

       logical-select-shard-key も参照してください。

   省略可能引数
       いくつか省略可能な引数があります。

   min
       shard_key カラムの最小値を指定します。

       logical-select-min も参照してください。

   min_border
       最小値を含めるかどうかを指定します。 includeexclude を指定します。デフォルトは include
       です。

       logical-select-min-border も参照してください。

   max
       shard_key カラムの最大値を指定します。

       logical-select-max も参照してください。

   max_border
       最大値を含めるかどうかを指定します。 includeexclude を指定します。デフォルトは include
       です。

       logical-select-max-border も参照してください。

   dependent
       バージョン 6.0.1 で追加.

       対象シャードに依存しているテーブル・カラムも一緒に削除するかどうかを指定します。

       以下が依存していると判断する条件です。もし、テーブル・カラムがこれらの条件のどれか1つでも
       満たしていてれば、そのテーブル・カラムは対象シャードに依存しています。

          · 対象シャードを参照しているテーブル・カラム

          · 対象シャード用のテーブル(= 名前の末尾が対象シャードと同じ _YYYYMMDD で、対象シャード
            が参照しているテーブル)

       yes を指定した場合は、対象シャードに依存しているテーブル・カラムも削除します。 yes  を指定
       しなければ削除しません。もし、対象シャードを参照しているテーブル・カラムが1つ以上あればエ
       ラーになります。もし、対象シャード用のテーブルがあっても、それらを削除しません。

       このパラメーターは注意して使ってください。危険なパラメーターです。

       このパラメーターの使い方は 関連するテーブルと一緒に削除 を参照してください。

   戻り値
       このコマンドが成功したときは以下のようにボディは true になります:

          [HEADER, true]

       このコマンドが失敗すると、 HEADER にエラーの詳細が含まれます。

       HEADER については /reference/command/output_format を参照してください。

   normalize
       注釈:
          このコマンドは実験的な機能です。

          このコマンドは将来的に変更されるかもしれません。

   概要
       normalize コマンドは指定したノーマライザーでテキストを正規化します。

       normalize コマンドを使うのにテーブルを作成する必要はありません。このコマンドは、ノーマライ
       ザーの結果を確認するのに便利です。

   構文
       このコマンドの引数は3つです。

       normalizerstring が必須です。他は省略できます:

          normalize normalizer
                    string
                    [flags=NONE]

   使い方
       以下は normalize コマンドの簡単な使用例です。

       実行例:

          normalize NormalizerAuto "aBcDe 123"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   {
          #     "normalized": "abcde 123",
          #     "types": [],
          #     "checks": []
          #   }
          # ]

   引数
       このセクションでは normalizer の引数について説明します。

   必須引数
       必須引数は二つあります。 normalizerstring です。

   normalizer
       ノーマライザー名を指定します。  normalize コマンドは normalizer で指定された名前のノーマラ
       イザーを使います。

       組み込みのノーマライザーの一覧は /reference/normalizers にあります。

       以下は NormalizerAuto ノーマライザーを使う例です。

       TODO

       他のノーマライザーを使いたい場合は、 register コマンドでノーマライザープラグインを登録する
       必要があります。例えば、  groonga-normalizer-mysql を登録することでMySQL互換の正規化方法を
       使うことができます。

   string
       正規化したい文字列を指定します。

       string の中に文字列を含める場合は、シングルクォート( '  )またはダブルクォート(  "  )で
       string をクォートする必要があります。

       string の中で空白を使う例です。

       TODO

   省略可能引数
       いくつか省略可能な引数があります。

   flags
       ノーマライズ処理をカスタマイズするオプションを指定します。「  | 」で区切って複数のオプショ
       ンを指定することができます。例えば、 REMOVE_BLANK|WITH_TYPES というように指定できます。

       指定可能なフラグは以下の通りです。

                             ┌───────────────────────────┬────────────────┐
                             │フラグ                     │ 説明           │
                             ├───────────────────────────┼────────────────┤
                             │NONE                       │ 無視されます。 │
                             ├───────────────────────────┼────────────────┤
                             │REMOVE_BLANK               │ TODO           │
                             ├───────────────────────────┼────────────────┤
                             │WITH_TYPES                 │ TODO           │
                             ├───────────────────────────┼────────────────┤
                             │WITH_CHECKS                │ TODO           │
                             ├───────────────────────────┼────────────────┤
                             │REMOVE_TOKENIZED_DELIMITER │ TODO           │
                             └───────────────────────────┴────────────────┘

       以下は REMOVE_BLANK を使った例です。

       TODO

       以下は WITH_TYPES を使った例です。

       TODO

       以下は REMOVE_TOKENIZED_DELIMITER を使った例です。

       TODO

   戻り値
          [HEADER, normalized_text]

       HEADER
          HEADER については /reference/command/output_format を参照してください。

       normalized_text
          normalized_text はオブジェクトです。このオブジェクトは以下の属性を持っています。

                              ┌───────────┬──────────────────────────────────┐
                              │名前       │ 説明                             │
                              ├───────────┼──────────────────────────────────┤
                              │normalized │ 正規化されたテキスト。           │
                              ├───────────┼──────────────────────────────────┤
                              │types      │ 正規化されたテキストのtype(文字  │
                              │           │ 種別)の配列です。N番目の   types │
                              │           │ は正規化されたテキストのN番目の  │
                              │           │ 文字のtype(文字種別)を示していま │
                              │           │ す。                             │
                              └───────────┴──────────────────────────────────┘

   参考
       · /reference/normalizers

   normalizer_list
   概要
       normalizer_list コマンドはデータベースに登録されているノーマライザーの一覧を返します。

   構文
       このコマンドに引数はありません:

          normalizer_list

   使い方
       以下は簡単な使用例です。

       実行例:

          normalizer_list
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     {
          #       "name": "NormalizerAuto"
          #     },
          #     {
          #       "name": "NormalizerNFKC51"
          #     }
          #   ]
          # ]

       データベースに登録されているノーマライザーの一覧を返します。

   戻り値
       normalizer_list コマンドはノーマライザーの一覧を返します。各ノーマライザーは属性を持ってい
       ます。例えば名前です。将来、属性は増えるかもしれません。:

          [HEADER, normalizers]

       HEADER
          HEADER については /reference/command/output_format を参照してください。

       normalizers
          normalizers    はノーマライザーの配列です。ノーマライザーは次の属性を持つオブジェクトで
          す。

                                        ┌─────┬────────────────────┐
                                        │名前 │ 説明               │
                                        ├─────┼────────────────────┤
                                        │name │ ノーマライザー名。 │
                                        └─────┴────────────────────┘

   参考
       · /reference/normalizers

       · /reference/commands/normalize

   object_exist
   概要
       バージョン 5.0.6 で追加.

       object_exist は指定した名前のオブジェクトがデータベースに存在するかどうかを返します。

       これは軽い操作です。データベース内に名前が存在するかだけをチェックします。ディスクから該当
       オブジェクトをロードしません。

       object_exist  はオブジェクトの種類をチェックしません。存在しているオブジェクトはテーブルか
       もしれませんし、カラムや関数かもしれません。

   構文
       このコマンドの引数は1つで必須です:

          object_exist name

   使い方
       データベース内で指定した名前がすでに使われているかをチェックできます。

       実行例:

          object_exist Users
          # [[0, 1337566253.89858, 0.000355720520019531], false]
          table_create Users TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          object_exist Users
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       object_exist UsersUsers テーブルを作る前は false を返します。

       object_exist UsersUsers テーブルを作った後は true を返します。

   引数
       このセクションではすべての引数について説明します。

   必須引数
       1つだけ必須の引数があります。

   name
       チェック対象のオブジェクト名を指定してください。

       カラムが存在するかどうかをチェックしたいときは、次のように テーブル名.カラム名  という書式
       を使ってください。

       実行例:

          table_create Logs TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs timestamp COLUMN_SCALAR Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          object_exist Logs.timestamp
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       Logs.timestamp 内の Logs がテーブル名で timestamp がカラム名です。

   省略可能引数
       省略可能な引数はありません。

   戻り値
       データベース内に指定した名前のオブジェクトが存在するときは、このコマンドは以下のようにボ
       ディとして true を返します:

          [HEADER, true]

       そうでない場合は false を返します:

          [HEADER, false]

       HEADER については /reference/command/output_format を参照してください。

   object_inspect
   概要
       バージョン 6.0.0 で追加.

       object_inspect はオブジェクトを調査します。オブジェクトの詳細を確認することができます。

       例:

          · オブジェクトがテーブルの場合、テーブル内のレコード数を確認できます。

          · オブジェクトがカラムの場合、値の型を確認できます。

   構文
       このコマンドの引数は1つで省略できます:

          object_inspect [name=null]

   使い方
       name で指定したデータベース内のオブジェクトを調査できます。

       実行例:

          table_create Users TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Users
          [
          {"_key": "Alice"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 1]
          object_inspect Users
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   {
          #     "name": "Users",
          #     "n_records": 1,
          #     "value": {
          #       "type": null
          #     },
          #     "key": {
          #       "total_size": 5,
          #       "max_total_size": 4294967295,
          #       "type": {
          #         "size": 4096,
          #         "type": {
          #           "id": 32,
          #           "name": "type"
          #         },
          #         "id": 14,
          #         "name": "ShortText"
          #       }
          #     },
          #     "type": {
          #       "id": 48,
          #       "name": "table:hash_key"
          #     },
          #     "id": 256
          #   }
          # ]

       object_inspect Users は以下の情報を返します。

          · テーブル名: "name": Users

          · 総キーサイズ: "key": {"total_size": 5}"Alice" は5バイトのデータです。)

          · 最大総キーサイズ: "key": {"max_total_size": 4294967295}

          · などなど。

       name を指定しないとデータベースを調査できます。

       実行例:

          object_inspect
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   {
          #     "name_table": {
          #       "name": "",
          #       "n_records": 256,
          #       "value": null,
          #       "key": {
          #         "type": null
          #       },
          #       "type": {
          #         "id": 50,
          #         "name": "table:dat_key"
          #       },
          #       "id": 0
          #     },
          #     "type": {
          #       "id": 55,
          #       "name": "db"
          #     }
          #   }
          # ]

       object_inspect は以下の情報を返します。

          · オブジェクトの名前管理をしているテーブルの種類:     "key":     {"type":     {"name":
            "table:dat_key"}}

          · などなど。

   引数
       このセクションではすべての引数について説明します。

   必須引数
       必須の引数はありません。

   省略可能引数
       省略可能な引数が1つあります。

   name
       調査対象のオブジェクト名を指定してください。

       name を指定しないとデータベースを調査します。

   戻り値
       このコマンドはボディとしてオブジェクト(たとえばテーブル)の詳細を含んだオブジェクト(ネス
       トしたキーと値のペア)を返します。:

          [HEADER, object]

       HEADER については /reference/command/output_format を参照してください。

       オブジェクトの詳細のフォーマットはオブジェクトの種類に依存します。たとえば、テーブルはキー
       の情報を含みますが、関数はキーの情報を含みません。

   データベース
       データベースを調査すると次の情報を返します。:

          {
            "type": {
              "id": DATABASE_TYPE_ID,
              "name": DATABASE_TYPE_NAME
            },
            "name_table": DATABASE_NAME_TABLE
          }

   DATABASE_TYPE_ID
       DATABASE_TYPE_ID は常に 55 です。

   DATABASE_TYPE_NAME
       DATABASE_TYPE_NAME は常に "db" です。

   DATABASE_NAME_TABLE
       DATABASE_NAME_TABLE はデータベース内のオブジェクト名を管理するテーブルです。このテーブルは
       table-pat-key または table-dat-key です。通常、 table-dat-key です。

       フォーマットの詳細は テーブル を参照してください。

   テーブル
       テーブルを調査すると次の情報を返します。:

          {
            "name": TABLE_NAME,
            "type": {
              "id": TABLE_TYPE_ID,
              "name": TABLE_TYPE_NAME
            },
            "key": {
              "type": TABLE_KEY_TYPE,
              "total_size": TABLE_KEY_TOTAL_SIZE
              "max_total_size": TABLE_KEY_MAX_TOTAL_SIZE
            },
            "value": {
              "type": TABLE_VALUE_TYPE,
            },
            "n_records": TABLE_N_RECORDS
          }

       いくつか例外があります。

          · table-no-key はキーの情報を返しません。なぜならキーを持っていないからです。

          · table-dat-key は値の情報を返しません。なぜなら値を持っていないからです。

   TABLE_NAME
       調査対象のテーブルの名前。

   TABLE_TYPE_ID
       調査対象のテーブルの種類のID

       以下は種類のIDのリストです。

                                         ┌───────────────┬────┐
                                         │テーブルの種類 │ ID │
                                         ├───────────────┼────┤
                                         │table-hash-key │ 48 │
                                         ├───────────────┼────┤
                                         │table-pat-key  │ 49 │
                                         ├───────────────┼────┤
                                         │table-dat-key  │ 50 │
                                         ├───────────────┼────┤
                                         │table-no-key   │ 51 │
                                         └───────────────┴────┘

   TABLE_TYPE_NAME
       調査対象のテーブルの種類の名前。

       以下は種類の名前のリストです。

                                  ┌───────────────┬──────────────────┐
                                  │テーブルの種類 │ 名前             │
                                  ├───────────────┼──────────────────┤
                                  │table-hash-key │ "table:hash_key" │
                                  ├───────────────┼──────────────────┤
                                  │table-pat-key  │ "table:pat_key"  │
                                  ├───────────────┼──────────────────┤
                                  │table-dat-key  │ "table:dat_key"  │
                                  ├───────────────┼──────────────────┤
                                  │table-no-key   │ "table:no_key"   │
                                  └───────────────┴──────────────────┘

   TABLE_KEY_TYPE
       調査対象のテーブルのキーの型。

       フォーマットの詳細は  を参照してください。

   TABLE_KEY_TOTAL_SIZE
       調査対象のテーブルの総キーサイズ。単位はバイト。

   TABLE_KEY_MAX_TOTAL_SIZE
       調査対象のテーブルの最大総キーサイズ。単位はバイト。

   TABLE_VALUE_TYPE
       調査対象のテーブルの値の型。

       フォーマットの詳細は  を参照してください。

   TABLE_N_RECORDS
       調査対象のテーブルのレコード数。

       64bitの正の整数です。

   
       型を調査すると次の情報を返します。

          {
            "id": TYPE_ID,
            "name": TYPE_NAME,
            "type": {
              "id": TYPE_ID_OF_TYPE,
              "name": TYPE_NAME_OF_TYPE
            },
            "size": TYPE_SIZE
          }

   TYPE_ID
       対象の型のIDです。

       以下は組み込みの型のIDのリストです。

                                  ┌─────────────────────────────┬────┐
                                  │型                           │ ID │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-bool            │ 3  │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-int8            │ 4  │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-uint8           │ 5  │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-int16           │ 6  │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-uint16          │ 7  │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-int32           │ 8  │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-uint32          │ 9  │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-int64           │ 10 │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-uint64          │ 11 │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-float           │ 12 │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-time            │ 13 │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-short-text      │ 14 │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-text            │ 15 │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-long-text       │ 16 │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-tokyo-geo-point │ 17 │
                                  ├─────────────────────────────┼────┤
                                  │builtin-type-wgs84-geo-point │ 18 │
                                  └─────────────────────────────┴────┘

   TYPE_NAME
       調査対象の型の名前。

       以下は組み込みの型の名前のリストです。

          · builtin-type-bool

          · builtin-type-int8

          · builtin-type-uint8

          · builtin-type-int16

          · builtin-type-uint16

          · builtin-type-int32

          · builtin-type-uint32

          · builtin-type-int64

          · builtin-type-uint64

          · builtin-type-float

          · builtin-type-time

          · builtin-type-short-text

          · builtin-type-text

          · builtin-type-long-text

          · builtin-type-tokyo-geo-point

          · builtin-type-wgs84-geo-point

   TYPE_ID_OF_TYPE
       TYPE_ID_OF_TYPE は常に 32 です。

   TYPE_NAME_OF_TYPE
       TYPE_NAME_OF_TYPE は常に type です。

   TYPE_SIZE
       TYPE_SIZE は調査対象の型のサイズです。単位はバイトです。調査対象の型が可変長型の場合は、サ
       イズは最大サイズという意味です。

   object_remove
   概要
       バージョン 6.0.0 で追加.

       object_remove はオブジェクトを削除します。テーブル・カラム・コマンドなどあらゆるオブジェク
       トを削除できます。通常は table_removecolumn_remove  といった対象オブジェクト専用のコマ
       ンドを使うべきです。

       object_remove  はあらゆるオブジェクトを削除できるため危険です。 object_remove を使うときは
       注意してください。

       object_remove には「強制モード」があります。「強制モード」を使うと壊れたオブジェクトを削除
       できます。「強制モード」は /reference/executables/grndb が報告した問題を解決するために有用
       です。

   構文
       このコマンドには2つの引数があります。:

          object_remove name
                        [force=no]

   使い方
       name で指定したデータベース内のオブジェクトを削除できます。

       実行例:

          object_remove Users
          # [
          #   [
          #     -22,
          #     1337566253.89858,
          #     0.000355720520019531,
          #     "[object][remove] target object doesn't exist: <Users>",
          #     [
          #       [
          #         "command_object_remove",
          #         "proc_object.c",
          #         121
          #       ]
          #     ]
          #   ],
          #   false
          # ]
          table_create Users TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          object_remove Users
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       object_remove UsersUsers テーブルを作る前は false を返します。

       object_remove UsersUsers テーブルを作った後は true を返します。

       デフォルトでは壊れたオブジェクトを削除することはできません。

       実行例:

          table_create Users TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          thread_limit 1
          # [[0, 1337566253.89858, 0.000355720520019531], 1]
          database_unmap
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          echo "BROKEN" > ${DB_PATH}.0000100
          object_remove Users
          # [
          #   [
          #     -22,
          #     1337566253.89858,
          #     0.000355720520019531,
          #     "[object][remove] failed to open the target object: <Users>",
          #     [
          #       [
          #         "command_object_remove",
          #         "proc_object.c",
          #         116
          #       ]
          #     ]
          #   ],
          #   false
          # ]
          object_exist Users
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       force yes を指定することで壊れたオブジェクトを削除できます。

       実行例:

          object_remove Users --force yes
          # [
          #   [
          #     -65,
          #     1337566253.89858,
          #     0.000355720520019531,
          #     "[io][open] file size is too small: <7>(required: >= 64): </tmp/groonga-databases/commands_object_remove.0000100>",
          #     [
          #       [
          #         "grn_io_open",
          #         "io.c",
          #         565
          #       ]
          #     ]
          #   ],
          #   false
          # ]
          object_exist Users
          # [[0, 1337566253.89858, 0.000355720520019531], false]

       --force yes は「強制モード」を有効にするという意味です。「強制モード」では壊れたオブジェク
       トを削除することができます。

   引数
       このセクションではすべての引数について説明します。

   必須引数
       必須の引数は1つです。

   name
       削除するテーブルの名前を指定します。

       カラムを削除したいときは、次のように テーブル名.カラム名 という書式を使ってください。

       実行例:

          table_create Logs TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs timestamp COLUMN_SCALAR Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          object_remove Logs.timestamp
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       Logs.timestamp 内の Logs がテーブル名で timestamp がカラム名です。

   省略可能引数
       省略可能な引数が1つあります。

   force
       「強制モード」でオブジェクトを削除するかどうかを指定します。

       デフォルトでは壊れたオブジェクトを削除できません。しかし、「強制モード」を使えば壊れたオブ
       ジェクトを削除できます。

       force の値は yes または no でなければいけません。 yes は「強制モード」を有効にするという意
       味です。 no は「強制モード」を無効にするという意味です。

       デフォルト値は no です。デフォルトでは「強制モード」は無効ということです。

   戻り値
       エラーなしでデータベース内に指定した名前のオブジェクトを削除したときはボディは true をにな
       ります。例:

          [HEADER, true]

       このコマンドを実行している最中になにかしらエラーが発生したときはボディは  false   になりま
       す。例:

          [HEADER, false]

       HEADER については /reference/command/output_format を参照してください。

       false が「このコマンドはオブジェクトを削除できなかった」ということを表すわけではないことに
       注意してください。「強制モード」を有効にすると、オブジェクトが壊れていても削除します。この
       場合、オブジェクトは削除されますが、ボディは false になります。

   plugin_register
       バージョン 5.0.1 で追加.

   概要
       plugin_register コマンドはプラグインを登録します。プラグインを使う前にプラグインを登録する
       必要があります。

       同じデータベースに対しては1つのプラグインについて一度だけ plugin_register コマンドを実行す
       れば十分です。これは、登録されたプラグイン情報はデータベースに記録されているからです。
       groonga プロセスを再起動したときは、 register コマンドを実行しなくてもすでに登録されている
       プラグインを読み込みます。

       plugin_unregister でプラグインの登録を解除することができます。

   構文
       このコマンドの引数は1つで必須です:

          plugin_register name

   使い方
       これは         ${PREFIX}/lib/groonga/plugins/query_expanders/tsv.so         に含まれている
       QueryExpanderTSV クエリー展開オブジェクトを登録する例です。

       実行例:

          plugin_register query_expanders/tsv
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       ${PREFIX}/lib/groonga/plugins/ と拡張子(  .so  )は省略可能です。これらは自動で補完されま
       す。

       plugin_register /usr/lib/groonga/plugins/query_expanders/tsv.so というように絶対パスを指定
       することもできます。

   戻り値
       plugin_register が成功したときは以下のようにボディは true になります:

          [HEADER, true]

       plugin_register が失敗すると、エラーの詳細は HEADER に含まれます。

       HEADER については /reference/command/output_format を参照してください。

   参考
       · plugin_unregister

   plugin_unregister
       注釈:
          このコマンドは実験的な機能です。

       バージョン 5.0.1 で追加.

   概要
       plugin_unregister コマンドはプラグインの登録を解除します。

   構文
       このコマンドの引数は1つで必須です:

          plugin_unregister name

   使い方
       これは         ${PREFIX}/lib/groonga/plugins/query_expanders/tsv.so         に含まれている
       QueryExpanderTSV クエリー展開オブジェクトの登録を解除する例です。

       実行例:

          plugin_unregister query_expanders/tsv
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       ${PREFIX}/lib/groonga/plugins/  と拡張子(  .so )は省略可能です。これらは自動で補完されま
       す。

       plugin_unregister /usr/lib/groonga/plugins/query_expanders/tsv.so というように絶対パスを指
       定することもできます。

   戻り値
       plugin_unregister が成功したときは以下のようにボディは true になります:

          [HEADER, true]

       plugin_unregister が失敗すると、エラーの詳細は HEADER に含まれます。

       HEADER については /reference/command/output_format を参照してください。

   参考
       · plugin_register

   quit
   概要
       quit - セッション終了

       Groonga組込コマンドの一つであるquitについて説明します。組込コマンドは、groonga実行ファイル
       の引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行
       します。

       quitは、groongaプロセスとのセッションを終了します。クライアントプロセスならばgroongaプロセ
       スとの接続を切ります。

   構文
          quit

   使い方
          quit

   引数
       ありません。

   戻り値
       ありません。

   range_filter
   概要
       TODO: write me

   構文
   使い方
   戻り値
   参考
       · /reference/commands/select

   register
       バージョン 5.0.1 で撤廃: Use plugin_register instead.

   概要
       register  コマンドはプラグインを登録します。プラグインを使う前にプラグインを登録する必要が
       あります。

       同じデータベースに対しては1つのプラグインについて一度だけ register` コマンドを実行すれば十
       分です。これは、登録されたプラグイン情報はデータベースに記録されているからです。   groonga
       プロセスを再起動したときは、 register コマンドを実行しなくてもすでに登録されているプラグイ
       ンを読み込みます。

       注釈:
          Registered plugins can be removed since Groonga 5.0.1. Use plugin_unregister in such  a
          case.

   構文
       このコマンドの引数は1つで必須です:

          register path

   使い方
       これは         ${PREFIX}/lib/groonga/plugins/query_expanders/tsv.so         に含まれている
       QueryExpanderTSV クエリー展開オブジェクトを登録する例です。

       実行例:

          register query_expanders/tsv
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       ${PREFIX}/lib/groonga/plugins/ と拡張子(  .so  )は省略可能です。これらは自動で補完されま
       す。

       register  /usr/lib/groonga/plugins/query_expanders/tsv.so というように絶対パスを指定するこ
       ともできます。

   戻り値
       register が成功したときは以下のようにボディは true になります:

          [HEADER, true]

       register が失敗すると、エラーの詳細は HEADER に含まれます。

       HEADER については /reference/command/output_format を参照してください。

   参考
       · plugin_register

       · plugin_unregister

   reindex
   概要
       バージョン 5.1.0 で追加.

       reindex コマンドは1つ以上のインデックスカラムを作り直します。

       対象オブジェクトにデータベースを指定するとすべてのインデックスカラムを作り直します。

       対象オブジェクトにテーブルを指定すると、そのテーブル内のすべてのインデックスカラムを作り直
       します。

       対象オブジェクトにデータカラムを指定すると、そのデータカラム用のすべてのインデックスカラム
       を作り直します。

       対象オブジェクトにインデックスカラムを指定すると、そのインデックスカラムを作り直します。

       このコマンドはインデックスカラムが壊れたときに便利です。対象オブジェクトはデータベー
       ス、テーブル、カラムのどれかです。

       注釈:
          reindex      コマンドを実行している間は対象インデックスカラムを使うことはできません。も
          し、複数のプロセスから同じデータベースを使っている場合、 reindex を実行したプロセス以外
          のすべてのプロセスはデータベースを開き直すべきです。データベースを開き直すには
          database_unmap を使えます。

   構文
       このコマンドの引数は1つで省略できます:

          reindex [target_name=null]

       target_name     パラメーターを省略した場合は対象オブジェクトはデータベースになります。これ
       は、データベース中のすべてのインデックスカラムを作りなおすという意味です。

   使い方
       以下はデータベースの中のすべてのインデックスカラムを作り直す例です。

       実行例:

          reindex
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       以下は    Lexicon    テーブルの中のすべてのインデックスカラム(    Lexicon.entry_keyLexicon.entry_body )を作り直す例です。

       実行例:

          table_create Entry TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entry body COLUMN_SCALAR Text
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Lexicon TABLE_PAT_KEY ShortText \
            --default_tokenizer TokenBigram \
            --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Lexicon entry_key COLUMN_INDEX|WITH_POSITION \
            Entry _key
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Lexicon entry_body COLUMN_INDEX|WITH_POSITION \
            Entry body
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          reindex Lexicon
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       以下は Site.title データカラムのすべてのインデックスカラム(  BigramLexicon.site_titleRegexpLexicon.site_title )を作り直す例です。

       実行例:

          table_create Site TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Site title COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create BigramLexicon TABLE_PAT_KEY ShortText \
            --default_tokenizer TokenBigram \
            --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create BigramLexicon site_title COLUMN_INDEX|WITH_POSITION \
            Site title
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create RegexpLexicon TABLE_PAT_KEY ShortText \
            --default_tokenizer TokenRegexp \
            --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create RegexpLexicon site_title COLUMN_INDEX|WITH_POSITION \
            Site title
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          reindex Site.title
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       以下は1つのインデックスカラム( Timestamp.index )を作り直す例です。

       実行例:

          table_create Logs TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Logs timestamp COLUMN_SCALAR Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Timestamp TABLE_PAT_KEY Time
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Timestamp logs_timestamp COLUMN_INDEX  Logs timestamp
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          reindex Timestamp.logs_timestamp
          # [[0, 1337566253.89858, 0.000355720520019531], true]

   引数
       このセクションではすべての引数について説明します。

   target_name
       テーブル名またはカラム名を指定します。

       指定しなかったら対象オブジェクトはデータベースになります。

       デフォルト値はありません。これは対象オブジェクトはデータベースになるということです。

   戻り値
       reindex コマンドは作り直しが成功したかどうかを返します。:

          [HEADER, SUCCEEDED_OR_NOT]

       HEADER
          HEADER については /reference/command/output_format を参照してください。

       SUCCEEDED_OR_NOT
          コマンドの実行が成功するとtrueを返します。失敗するとエラーとしてfalseを返します。

   request_cancel
   概要
       注釈:
          このコマンドは実験的な機能です。

       バージョン 4.0.9 で追加.

       request_cancel コマンドは実行中のリクエストをキャンセルします。

       いくつか制限があります。

          · リクエストIDはユーザーが管理する必要があります。(各リクエストに一意のキーを割り当て
            る必要があります。)

          · キャンセルリクエストは無視されることもあります。(同じリクエストIDに対して何度も
            request_cancel コマンドを送信することができます。)

          · マルチスレッド型のGroongaサーバーのみサポートしています。(
            /reference/executables/groonga                       ベースのサーバーでは使えますが、
            /reference/executables/groonga-httpd では使えません。)

       リクエストIDについては /reference/command/request_id を参照してください。

       リクエストがキャンセルされたら、キャンセルされたリクエストの
       /reference/command/return_code-5GRN_INTERRUPTED_FUNCTION_CALL )になります。

   構文
       このコマンドの引数は1つで必須です:

          request_cancel id

   使い方
       以下は request_cancel コマンドの使用例です:

          $ curl 'http://localhost:10041/d/select?table=LargeTable&filter=true&request_id=unique-id-1' &
          # The above "select" takes a long time...
          # Point: "request_id=unique-id-1"
          $ curl 'http://localhost:10041/d/request_cancel?id=unique-id-1'
          [[...], {"id": "unique-id-1", "canceled": true}]
          # Point: "id=unique-id-1"

       最初の select コマンドが長時間かかると仮定します。 request_id=unique-id-1 パラメーターを指
       定することで unique-id-1 というリクエストIDをこの select コマンドに割り当てます。

       2つめの    request_cancel    コマンドで    id=unique-id-1   パラメーターを指定しています。
       unique-id-1select コマンドに渡したリクエストIDと同じリクエストIDです。

       この select コマンドはすぐにはキャンセルされないかもしれません。また、このキャンセルリクエ
       ストは無視されることもあります。

       同じリクエストIDに対するキャンセルリクエストを複数回送ることができます。もし、対象のリクエ
       ストがキャンセルされたか終了した場合は戻り値の中の "canceled" の値が true から false  に変
       わります。

          $ curl 'http://localhost:10041/d/request_cancel?id=unique-id-1'
          [[...], {"id": "unique-id-1", "canceled": true}]
          # "select" is still running... ("canceled" is "true")
          $ curl 'http://localhost:10041/d/request_cancel?id=unique-id-1'
          [[...], {"id": "unique-id-1", "canceled": true}]
          # "select" is still running... ("canceled" is "true")
          $ curl 'http://localhost:10041/d/request_cancel?id=unique-id-1'
          [[...], {"id": "unique-id-1", "canceled": false}]
          # "select" is canceled or finished. ("canceled" is "false")

       もし、この       select       コマンドがキャンセルされたら、       select       コマンドの
       /reference/command/return_code-5GRN_INTERRUPTED_FUNCTION_CALL )になります。:

          $ curl 'http://localhost:10041/d/select?table=LargeTable&filter=true&request_id=unique-id-1' &
          [[-5, ...], ...]

   引数
       このセクションでは request_cancel の引数について説明します。

   必須引数
       id だけが必須の引数です。

   id
       対象リクエストのIDを指定します。

   戻り値
       request_cancel コマンドはキャンセルリクエストの結果を返します。:

          [
            HEADER,
            {
              "id":       ID,
              "canceled": CANCEL_REQUEST_IS_ACCEPTED_OR_NOT
            }
          ]

       HEADER
          HEADER については /reference/command/output_format を参照してください。

       ID
          対象のリクエストのIDです。

       CANCEL_REQUEST_IS_ACCEPTED_OR_NOT
          もし、このキャンセルリクエストが受け付けられたら true 、そうでなければ  false  になりま
          す。

          「キャンセルリクエストが受け付けられた」というのは「対象リクエストがキャンセルされ
          た」という意味ではないことに注意してください。これは「キャンセルリクエストは対象リクエ
          ストに通知したが、対象リクエストはそのキャンセルリクエストを無視するかもしれない」とい
          う意味です。

          指定したリクエストIDが割り当てられているリクエストが存在しなければ false になります。

   参考
       · /reference/command/request_id

   ruby_eval
   概要
       ruby_eval コマンドはRubyスクリプトを評価して評価結果を返します。

   構文
       このコマンドの引数は1つで必須です:

          ruby_eval script

   使い方
       ruby_eval を使うと、mrubyがサポートしているスクリプトを実行できます。

       Rubyスクリプトとして 1 + 2 という計算するだけの例です。

       実行例:

          register ruby/eval
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          ruby_eval "1 + 2"
          # [[0, 1337566253.89858, 0.000355720520019531], {"value": 3}]

       ruby_eval コマンドを使うには事前に ruby/eval プラグインを登録します。

       ruby_eval   コマンドは実験的なプラグインです。このコマンドは将来的に変更されるかもしれませ
       ん。

   引数
       このセクションではすべての引数について説明します。

   script
       評価したいrubyスクリプトを指定します。

   戻り値
       ruby_eval は例外情報などのメタデータつきで評価結果を返します(メタデータはまだ実装されてい
       ないので今のところ含まれません):

          [HEADER, {"value": EVALUATED_VALUE}]

       HEADER
          HEADER については /reference/command/output_format を参照してください。

       EVALUATED_VALUE
          EVALUATED_VALUEruby_script を評価した値です。

          今のところ、 ruby_eval は評価された値として数値だけサポートしています。サポートしている
          型は今後増えていく予定です。

   参考
   ruby_load
   概要
       ruby_load コマンドは指定したRubyスクリプトを読み込みます。

   構文
       このコマンドの引数は1つで必須です:

          ruby_load path

   使い方
       ruby_load を使ってmrubyがサポートしているスクリプトを読み込むことができます。

       Rubyスクリプトとして expression.rb を単に読み込む例です。

       実行例:

          register ruby/load
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          ruby_load "expression.rb"
          # [[0, 1337566253.89858, 0.000355720520019531], {"value": null}]

       ruby_load コマンドを使うには事前に ruby/load プラグインを登録します。

       ruby_load   コマンドは実験的なプラグインです。このコマンドは将来的に変更されるかもしれませ
       ん。

   引数
       このセクションではすべての引数について説明します。

   path
       読み込みたいrubyスクリプトを指定します。

   戻り値
       ruby_load は例外情報などのメタデータつきで読み込んだ結果を返します(メタデータはまだ実装さ
       れていないので今のところ含まれません):

          [HEADER, {"value": LOADED_VALUE}]

       HEADER
          HEADER については /reference/command/output_format を参照してください。

       LOADED_VALUE
          LOADED_VALUE はrubyスクリプトを読み込んだ結果です。

          ruby_loadLOADED_VALUE   としていまのところは単に   null  を返します。将来的には
          LOADED_VALUE がサポートされる予定です。

   参考
       /reference/commands/ruby_eval

   schema
   概要
       バージョン 5.0.9 で追加.

       schema コマンドはデータベース内のスキーマを返します。

       このコマンドはデータベースの詳細を知りたいときに便利です。たとえば、データベースを視覚化し
       たり、データベースのGUIを作ったりするときに便利です。

   構文
       このコマンドに引数はありません:

          schema

   使い方
       以下は出力例を示すためのサンプルスキーマです。

       実行例:

          table_create Memos TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Memos content COLUMN_SCALAR Text
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Terms TABLE_PAT_KEY ShortText \
            --default_tokenizer TokenBigram \
            --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Terms memos_content_index \
            COLUMN_INDEX|WITH_POSITION \
            Memos content
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       このサンプルスキーマに対する schema コマンドの出力は次の通りです。

       実行例:

          schema
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   {
          #     "tables": {
          #       "Terms": {
          #         "normalizer": {
          #           "name": "NormalizerAuto"
          #         },
          #         "name": "Terms",
          #         "tokenizer": {
          #           "name": "TokenBigram"
          #         },
          #         "command": {
          #           "command_line": "table_create --name Terms --flags TABLE_PAT_KEY --key_type ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto",
          #           "name": "table_create",
          #           "arguments": {
          #             "key_type": "ShortText",
          #             "default_tokenizer": "TokenBigram",
          #             "normalizer": "NormalizerAuto",
          #             "flags": "TABLE_PAT_KEY",
          #             "name": "Terms"
          #           }
          #         },
          #         "indexes": [],
          #         "key_type": {
          #           "type": "type",
          #           "name": "ShortText"
          #         },
          #         "value_type": null,
          #         "token_filters": [],
          #         "type": "patricia trie",
          #         "columns": {
          #           "memos_content_index": {
          #             "name": "memos_content_index",
          #             "weight": false,
          #             "section": false,
          #             "compress": null,
          #             "command": {
          #               "command_line": "column_create --table Terms --name memos_content_index --flags COLUMN_INDEX|WITH_POSITION --type Memos --sources content",
          #               "name": "column_create",
          #               "arguments": {
          #                 "table": "Terms",
          #                 "flags": "COLUMN_INDEX|WITH_POSITION",
          #                 "name": "memos_content_index",
          #                 "sources": "content",
          #                 "type": "Memos"
          #               }
          #             },
          #             "indexes": [],
          #             "sources": [
          #               {
          #                 "table": "Memos",
          #                 "name": "content",
          #                 "full_name": "Memos.content"
          #               }
          #             ],
          #             "value_type": {
          #               "type": "reference",
          #               "name": "Memos"
          #             },
          #             "full_name": "Terms.memos_content_index",
          #             "position": true,
          #             "table": "Terms",
          #             "type": "index"
          #           }
          #         }
          #       },
          #       "Memos": {
          #         "normalizer": null,
          #         "name": "Memos",
          #         "tokenizer": null,
          #         "command": {
          #           "command_line": "table_create --name Memos --flags TABLE_HASH_KEY --key_type ShortText",
          #           "name": "table_create",
          #           "arguments": {
          #             "key_type": "ShortText",
          #             "flags": "TABLE_HASH_KEY",
          #             "name": "Memos"
          #           }
          #         },
          #         "indexes": [],
          #         "key_type": {
          #           "type": "type",
          #           "name": "ShortText"
          #         },
          #         "value_type": null,
          #         "token_filters": [],
          #         "type": "hash table",
          #         "columns": {
          #           "content": {
          #             "name": "content",
          #             "weight": false,
          #             "section": false,
          #             "compress": null,
          #             "command": {
          #               "command_line": "column_create --table Memos --name content --flags COLUMN_SCALAR --type Text",
          #               "name": "column_create",
          #               "arguments": {
          #                 "table": "Memos",
          #                 "flags": "COLUMN_SCALAR",
          #                 "name": "content",
          #                 "type": "Text"
          #               }
          #             },
          #             "indexes": [
          #               {
          #                 "table": "Terms",
          #                 "section": 0,
          #                 "name": "memos_content_index",
          #                 "full_name": "Terms.memos_content_index"
          #               }
          #             ],
          #             "sources": [],
          #             "value_type": {
          #               "type": "type",
          #               "name": "Text"
          #             },
          #             "full_name": "Memos.content",
          #             "position": false,
          #             "table": "Memos",
          #             "type": "scalar"
          #           }
          #         }
          #       }
          #     },
          #     "normalizers": {
          #       "NormalizerNFKC51": {
          #         "name": "NormalizerNFKC51"
          #       },
          #       "NormalizerAuto": {
          #         "name": "NormalizerAuto"
          #       }
          #     },
          #     "token_filters": {},
          #     "tokenizers": {
          #       "TokenBigramSplitSymbolAlphaDigit": {
          #         "name": "TokenBigramSplitSymbolAlphaDigit"
          #       },
          #       "TokenRegexp": {
          #         "name": "TokenRegexp"
          #       },
          #       "TokenBigramIgnoreBlankSplitSymbolAlphaDigit": {
          #         "name": "TokenBigramIgnoreBlankSplitSymbolAlphaDigit"
          #       },
          #       "TokenBigram": {
          #         "name": "TokenBigram"
          #       },
          #       "TokenDelimit": {
          #         "name": "TokenDelimit"
          #       },
          #       "TokenUnigram": {
          #         "name": "TokenUnigram"
          #       },
          #       "TokenBigramSplitSymbol": {
          #         "name": "TokenBigramSplitSymbol"
          #       },
          #       "TokenDelimitNull": {
          #         "name": "TokenDelimitNull"
          #       },
          #       "TokenBigramIgnoreBlankSplitSymbolAlpha": {
          #         "name": "TokenBigramIgnoreBlankSplitSymbolAlpha"
          #       },
          #       "TokenBigramSplitSymbolAlpha": {
          #         "name": "TokenBigramSplitSymbolAlpha"
          #       },
          #       "TokenTrigram": {
          #         "name": "TokenTrigram"
          #       },
          #       "TokenMecab": {
          #         "name": "TokenMecab"
          #       },
          #       "TokenBigramIgnoreBlankSplitSymbol": {
          #         "name": "TokenBigramIgnoreBlankSplitSymbol"
          #       },
          #       "TokenBigramIgnoreBlank": {
          #         "name": "TokenBigramIgnoreBlank"
          #       }
          #     },
          #     "plugins": {},
          #     "types": {
          #       "UInt64": {
          #         "can_be_key_type": true,
          #         "name": "UInt64",
          #         "can_be_value_type": true,
          #         "size": 8
          #       },
          #       "Int32": {
          #         "can_be_key_type": true,
          #         "name": "Int32",
          #         "can_be_value_type": true,
          #         "size": 4
          #       },
          #       "Int16": {
          #         "can_be_key_type": true,
          #         "name": "Int16",
          #         "can_be_value_type": true,
          #         "size": 2
          #       },
          #       "LongText": {
          #         "can_be_key_type": false,
          #         "name": "LongText",
          #         "can_be_value_type": false,
          #         "size": 2147483648
          #       },
          #       "TokyoGeoPoint": {
          #         "can_be_key_type": true,
          #         "name": "TokyoGeoPoint",
          #         "can_be_value_type": true,
          #         "size": 8
          #       },
          #       "Text": {
          #         "can_be_key_type": false,
          #         "name": "Text",
          #         "can_be_value_type": false,
          #         "size": 65536
          #       },
          #       "ShortText": {
          #         "can_be_key_type": true,
          #         "name": "ShortText",
          #         "can_be_value_type": false,
          #         "size": 4096
          #       },
          #       "Float": {
          #         "can_be_key_type": true,
          #         "name": "Float",
          #         "can_be_value_type": true,
          #         "size": 8
          #       },
          #       "UInt8": {
          #         "can_be_key_type": true,
          #         "name": "UInt8",
          #         "can_be_value_type": true,
          #         "size": 1
          #       },
          #       "UInt32": {
          #         "can_be_key_type": true,
          #         "name": "UInt32",
          #         "can_be_value_type": true,
          #         "size": 4
          #       },
          #       "Object": {
          #         "can_be_key_type": true,
          #         "name": "Object",
          #         "can_be_value_type": true,
          #         "size": 8
          #       },
          #       "UInt16": {
          #         "can_be_key_type": true,
          #         "name": "UInt16",
          #         "can_be_value_type": true,
          #         "size": 2
          #       },
          #       "Int64": {
          #         "can_be_key_type": true,
          #         "name": "Int64",
          #         "can_be_value_type": true,
          #         "size": 8
          #       },
          #       "Time": {
          #         "can_be_key_type": true,
          #         "name": "Time",
          #         "can_be_value_type": true,
          #         "size": 8
          #       },
          #       "Bool": {
          #         "can_be_key_type": true,
          #         "name": "Bool",
          #         "can_be_value_type": true,
          #         "size": 1
          #       },
          #       "WGS84GeoPoint": {
          #         "can_be_key_type": true,
          #         "name": "WGS84GeoPoint",
          #         "can_be_value_type": true,
          #         "size": 8
          #       },
          #       "Int8": {
          #         "can_be_key_type": true,
          #         "name": "Int8",
          #         "can_be_value_type": true,
          #         "size": 1
          #       }
          #     }
          #   }
          # ]

   引数
       このセクションではすべての引数について説明します。

   必須引数
       必須の引数はありません。

   省略可能引数
       省略可能な引数はありません。

   戻り値
       schema はこのデータベースのスキーマを返します。:

          [HEADER, SCHEMA]

   HEADER
       HEADER については /reference/command/output_format を参照してください。

   SCHEMA
       SCHEMA は以下の情報を含んだオブジェクトです。:

          {
            "plugins":       PLUGINS,
            "types":         TYPES,
            "tokenizers":    TOKENIZERS,
            "normalizers":   NORMALIZERS,
            "token_filters": TOKEN_FITLERS,
            "tables":        TABLES
          }

   PLUGINS
       PLUGINS はオブジェクトです。キーはプラグイン名で値はプラグインの詳細です。:

          {
            "PLUGIN_NAME_1": PLUGIN_1,
            "PLUGIN_NAME_2": PLUGIN_2,
            ...
            "PLUGIN_NAME_n": PLUGIN_n
          }

   PLUGIN
       PLUGIN はプラグインの詳細を示すオブジェクトです。

          {
            "name": PLUGIN_NAME
          }

       以下は PLUGIN のプロパティです。

                               ┌─────┬──────────────────────────────────┐
                               │名前 │ 説明                             │
                               ├─────┼──────────────────────────────────┤
                               │name │ プラグイン名。   plugin_register │
                               │     │ で使います。                     │
                               └─────┴──────────────────────────────────┘

   TYPES
       TYPES はオブジェクトです。キーは型名で、値は型の詳細です。:

          {
            "TYPE_NAME_1": TYPE_1,
            "TYPE_NAME_2": TYPE_2,
            ...
            "TYPE_NAME_n": TYPE_n
          }

   TYPE
       TYPE は型の詳細を示すオブジェクトです。:

          {
            "name": TYPE_NAME,
            "size": SIZE_OF_ONE_VALUE_IN_BYTE,
            "can_be_key_type": BOOLEAN,
            "can_be_value_type": BOOLEAN
          }

       以下は TYPE のプロパティです。

                         ┌──────────────────┬──────────────────────────────────┐
                         │名前              │ 説明                             │
                         ├──────────────────┼──────────────────────────────────┤
                         │name              │ 型名。                           │
                         ├──────────────────┼──────────────────────────────────┤
                         │size              │ 1つの値のバイト数です。          │
                         ├──────────────────┼──────────────────────────────────┤
                         │can_be_key_type   │ この型をテーブルのキーの型に使え │
                         │                  │ るなら   true   、そうでないなら │
                         │                  │ false 。                         │
                         ├──────────────────┼──────────────────────────────────┤
                         │can_be_value_type │ この型をテーブルの値の型に使える │
                         │                  │ なら true 、そうでないなら false │
                         │                  │ 。                               │
                         └──────────────────┴──────────────────────────────────┘

   TOKENIZERS
       TOKENIZERS はオブジェクトです。キーはトークナイザー名で値はトークナイザーの詳細です。:

          {
            "TOKENIZER_NAME_1": TOKENIZER_1,
            "TOKENIZER_NAME_2": TOKENIZER_2,
            ...
            "TOKENIZER_NAME_n": TOKENIZER_n
          }

   TOKENIZER
       TOKENIZER はトークナイザーの詳細を示すオブジェクトです。:

          {
            "name": TOKENIZER_NAME
          }

       以下は TOKENIZER のプロパティです。

                                ┌─────┬────────────────────────────────┐
                                │名前 │ 説明                           │
                                ├─────┼────────────────────────────────┤
                                │name │ トークナイザー名。             │
                                │     │ table-create-default-tokenizer │
                                │     │ で使います。                   │
                                └─────┴────────────────────────────────┘

   NORMALIZERS
       NORMALIZERS はオブジェクトです。キーはノーマライザー名で値はノーマライザーの詳細です。:

          {
            "NORMALIZER_NAME_1": NORMALIZER_1,
            "NORMALIZER_NAME_2": NORMALIZER_2,
            ...
            "NORMALIZER_NAME_n": NORMALIZER_n
          }

   NORMALIZER
       NORMALIZER はノーマライザーの詳細を示すオブジェクトです。:

          {
            "name": NORMALIZER_NAME
          }

       以下は NORMALIZER のプロパティです。

                               ┌─────┬──────────────────────────────────┐
                               │名前 │ 説明                             │
                               └─────┴──────────────────────────────────┘

                               │name │ ノーマライザー名。               │
                               │     │ table-create-normalizer で使いま │
                               │     │ す。                             │
                               └─────┴──────────────────────────────────┘

   TOKEN_FILTERS
       TOKEN_FILTERS はオブジェクトです。キーはトークンフィルター名で値はトークンフィルターの詳細
       です。:

          {
            "TOKEN_FILTER_NAME_1": TOKEN_FILTER_1,
            "TOKEN_FILTER_NAME_2": TOKEN_FILTER_2,
            ...
            "TOKEN_FILTER_NAME_n": TOKEN_FILTER_n
          }

   TOKEN_FILTER
       TOKEN_FILTER はトークンフィルターの詳細を示すオブジェクトです。:

          {
            "name": TOKEN_FILTER_NAME
          }

       以下は TOKEN_FILTER のプロパティです。

                               ┌─────┬──────────────────────────────────┐
                               │名前 │ 説明                             │
                               ├─────┼──────────────────────────────────┤
                               │name │ トークンフィルター名。           │
                               │     │ table-create-token-filters  で使 │
                               │     │ います。                         │
                               └─────┴──────────────────────────────────┘

   TABLES
       TABLES はオブジェクトです。キーはテーブル名で値はテーブルの詳細です。:

          {
            "TABLE_NAME_1": TABLE_1,
            "TABLE_NAME_2": TABLE_2,
            ...
            "TABLE_NAME_n": TABLE_n
          }

   TABLE
       TABLE はテーブルの詳細を示すオブジェクトです。

          {
            "name": TABLE_NAME
            "type": TYPE,
            "key_type": KEY_TYPE,
            "value_type": VALUE_TYPE,
            "tokenizer": TOKENIZER,
            "normalizer": NORMALIZER,
            "token_filters": [
              TOKEN_FILTER_1,
              TOKEN_FILTER_2,
              ...,
              TOKEN_FILTER_n,
            ],
            "indexes": [
              INDEX_1,
              INDEX_2,
              ...,
              INDEX_n
            ],
            "command": COMMAND,
            "columns": {
              "COLUMN_NAME_1": COLUMN_1,
              "COLUMN_NAME_2": COLUMN_2,
              ...,
              "COLUMN_NAME_3": COLUMN_3,
            }
          }

       以下は TABLE のプロパティです。

                           ┌──────────────┬──────────────────────────────────┐
                           │名前          │ 説明                             │
                           ├──────────────┼──────────────────────────────────┤
                           │name          │ テーブル名。                     │
                           ├──────────────┼──────────────────────────────────┤
                           │type          │ テーブルの種類。                 │
                           │              │                                  │
                           │              │ 以下のどれかです。               │
                           │              │                                  │
                           │              │           · array: table-no-key  │
                           │              │                                  │
                           │              │           · hash: table-hash-key │
                           │              │                                  │
                           │              │           · patricia       trie: │
                           │              │             table-pat-key        │
                           │              │                                  │
                           │              │           · double  array  trie: │
                           │              │             table-dat-key        │
                           └──────────────┴──────────────────────────────────┘

                           │key_type      │ テーブルのキーの型。             │
                           │              │                                  │
                           │              │ テーブルの種類が array なら null │
                           │              │ になります。                     │
                           │              │                                  │
                           │              │ テーブルの種類が array  でなけれ │
                           │              │ ばオブジェクトになります。オブ   │
                           │              │ ジェクトは次のプロパティを持ちま │
                           │              │ す。                             │
                           │              │                                  │
                           │              │           · name :型名。        │
                           │              │                                  │
                           │              │           · type  :もし型がテー │
                           │              │             ブルなら   reference │
                           │              │             、そうでないなら     │
                           │              │             type 。              │
                           ├──────────────┼──────────────────────────────────┤
                           │value_type    │ テーブルの値の型。               │
                           │              │                                  │
                           │              │ テーブルが「値」を使っていない場 │
                           │              │ 合は null になります。           │
                           │              │                                  │
                           │              │ テーブルが「値」を使っている場合 │
                           │              │ はオブジェクトになります。オブ   │
                           │              │ ジェクトは次のプロパティを持ちま │
                           │              │ す。                             │
                           │              │                                  │
                           │              │           · name :型名。        │
                           │              │                                  │
                           │              │           · type  :もし型がテー │
                           │              │             ブルなら   reference │
                           │              │             、そうでないなら     │
                           │              │             type 。              │
                           ├──────────────┼──────────────────────────────────┤
                           │tokenizer     │ テーブルのトークナイザー。       │
                           │              │ table-create-default-tokenizer   │
                           │              │ で指定されたものです。           │
                           │              │                                  │
                           │              │ テーブルがトークナイザーを使って │
                           │              │ いない場合は null になります。   │
                           │              │                                  │
                           │              │ テーブルがトークナイザーを使って │
                           │              │ いる場合はオブジェクトになりま   │
                           │              │ す。オブジェクトは次のプロパティ │
                           │              │ を持ちます。                     │
                           │              │                                  │
                           │              │           · name    :トークナイ │
                           │              │             ザー名。             │
                           ├──────────────┼──────────────────────────────────┤
                           │normalizer    │ テーブルのノーマライザー。       │
                           │              │ table-create-normalizer で指定さ │
                           │              │ れたものです。                   │
                           │              │                                  │
                           │              │ テーブルがノーマライザーを使って │
                           │              │ いない場合は null になります。   │
                           │              │                                  │
                           │              │ テーブルがノーマライザーを使って │
                           │              │ いる場合はオブジェクトになりま   │
                           │              │ す。オブジェクトは次のプロパティ │
                           │              │ を持ちます。                     │
                           │              │                                  │
                           │              │           · name    :ノーマライ │
                           │              │             ザー名。             │
                           ├──────────────┼──────────────────────────────────┤
                           │token_filters │ テーブルのトークンフィルターで   │
                           │              │ す。  table-create-token-filters │
                           │              │ で指定されたものです。           │
                           │              │                                  │
                           │              │ オブジェクトの配列です。オブジェ │
                           │              │ クトは次のプロパティを持ちます。 │
                           │              │                                  │
                           │              │           · name  :トークンフィ │
                           │              │             ルター名。           │
                           ├──────────────┼──────────────────────────────────┤
                           │indexes       │ テーブルのキーに対するインデック │
                           │              │ ス。                             │
                           │              │                                  │
                           │              │ INDEX の配列です。               │
                           ├──────────────┼──────────────────────────────────┤
                           │command       │ このテーブルを作るため           │
                           │              │ のGroongaコマンドに関する情報。  │
                           │              │                                  │
                           │              │ COMMAND になります。             │
                           ├──────────────┼──────────────────────────────────┤
                           │columns       │ テーブルのカラム。               │
                           │              │                                  │
                           │              │ オブジェクトです。キーはカラム名 │
                           │              │ で値は COLUMN です。             │
                           └──────────────┴──────────────────────────────────┘

   INDEX
       INDEX はインデックスの詳細を示すオブジェクトです。:

          {
            "full_name": INDEX_COLUMN_NAME_WITH_TABLE_NAME,
            "table":     TABLE_NAME,
            "name":      INDEX_COLUMN_NAME,
            "section":   SECTION
          }

       以下は INDEX のプロパティです。

                             ┌──────────┬──────────────────────────────────┐
                             │名前      │ 説明                             │
                             ├──────────┼──────────────────────────────────┤
                             │full_name │ テーブル名を含むインデックスカラ │
                             │          │ ム名。                           │
                             │          │                                  │
                             │          │ 例: Terms.index                 │
                             ├──────────┼──────────────────────────────────┤
                             │table     │ インデックスカラムのテーブル名。 │
                             │          │                                  │
                             │          │ 例: Terms                       │
                             ├──────────┼──────────────────────────────────┤
                             │name      │ インデックスカラム名。           │
                             │          │                                  │
                             │          │ 例: index                       │
                             ├──────────┼──────────────────────────────────┤
                             │section   │ テーブルのキーに対するインデック │
                             │          │ スカラムのセクション番号。       │
                             │          │                                  │
                             │          │ インデックスカラムがマルチカラム │
                             │          │ インデックスでない場合は  0 にな │
                             │          │ ります。                         │
                             └──────────┴──────────────────────────────────┘

   COMMAND
       COMMAND はこのテーブル・カラムを作る方法を示したオブジェクトです。:

          {
            "name": COMMAND_NAME,
            "arguments": {
              "KEY_1": "VALUE_1",
              "KEY_2": "VALUE_2",
              ...,
              "KEY_n": "VALUE_n"
            },
            "command_line": COMMAND_LINE
          }

       以下は COMMAND のプロパティです。

                           ┌─────────────┬──────────────────────────────────┐
                           │名前         │ 説明                             │
                           ├─────────────┼──────────────────────────────────┤
                           │name         │ このテーブル・カラムを作         │
                           │             │ るGroongaコマンドの名前。        │
                           ├─────────────┼──────────────────────────────────┤
                           │arguments    │ このテーブル・カラムを作るため   │
                           │             │ のGroongaコマンドの引数。        │
                           │             │                                  │
                           │             │ オブジェクトになります。キーは引 │
                           │             │ 数名で値は引数の値です。         │
                           ├─────────────┼──────────────────────────────────┤
                           │command_line │ このテーブル・カラムを作         │
                           │             │ るGroongaコマンドのコマンドライ  │
                           │             │ ンです。                         │
                           │             │                                  │
                           │             │ この文字列はGroongaが評価できま  │
                           │             │ す。                             │
                           └─────────────┴──────────────────────────────────┘

   COLUMN
       COLUMN はカラムの詳細を示したオブジェクトです。:

          {
            "name": COLUMN_NAME,
            "table": TABLE_NAME,
            "full_name": COLUMN_NAME_WITH_TABLE,
            "type": TYPE,
            "value_type": VALUE_TYPE,
            "compress": COMPRESS,
            "section": SECTION,
            "weight": WEIGHT,
            "compress": COMPRESS,
            "section": BOOLEAN,
            "weight": BOOLEAN,
            "position": BOOLEAN,
            "sources": [
              SOURCE_1,
              SOURCE_2,
              ...,
              SOURCE_n
            ],
            "indexes": [
              INDEX_1,
              INDEX_2,
              ...,
              INDEX_n
            ],
            "command": COMMAND
          }

       以下は COLUMN のプロパティです。

                          ┌───────────┬───────────────────────────────────────┐
                          │名前       │ 説明                                  │
                          ├───────────┼───────────────────────────────────────┤
                          │name       │ カラム名。                            │
                          │           │                                       │
                          │           │ 例: age                              │
                          └───────────┴───────────────────────────────────────┘

                          │table      │ カラムのテーブル名。                  │
                          │           │                                       │
                          │           │ 例: Users                            │
                          ├───────────┼───────────────────────────────────────┤
                          │full_name  │ テーブル名を含むカラム名。            │
                          │           │                                       │
                          │           │ 例: Users.age                        │
                          ├───────────┼───────────────────────────────────────┤
                          │type       │ カラムの種類。                        │
                          │           │                                       │
                          │           │ 以下のどれかです。                    │
                          │           │                                       │
                          │           │           · scalar:                   │
                          │           │             /reference/columns/scalar │
                          │           │                                       │
                          │           │           · vector:                   │
                          │           │             /reference/columns/vector │
                          │           │                                       │
                          │           │           · index:                    │
                          │           │             /reference/columns/index  │
                          ├───────────┼───────────────────────────────────────┤
                          │value_type │ カラムの値の型。                      │
                          │           │                                       │
                          │           │ オブジェクトです。このオブジェクトは  │
                          │           │ 次のプロパティを持ちます。            │
                          │           │                                       │
                          │           │           · name :型名。             │
                          │           │                                       │
                          │           │           · type :もし型がテーブルな │
                          │           │             ら reference 、そうでない │
                          │           │             なら type 。              │
                          ├───────────┼───────────────────────────────────────┤
                          │compress   │ カラムの圧縮方法です。                │
                          │           │                                       │
                          │           │ カラムがどの圧縮方法も使っていない場  │
                          │           │ 合は null になります。                │
                          │           │                                       │
                          │           │ カラムが圧縮方法を使っている場合は次  │
                          │           │ のどれかになります。                  │
                          │           │                                       │
                          │           │           · zlib :カラムの値を圧縮す │
                          │           │             るためにzlibを使います。  │
                          │           │                                       │
                          │           │           · lz4  :カラムの値を圧縮す │
                          │           │             るためにLZ4を使います。   │
                          ├───────────┼───────────────────────────────────────┤
                          │section    │ カラムがセクション情報を保存できるか  │
                          │           │ どうか。                              │
                          │           │                                       │
                          │           │ WITH_SECTION フラグ付きでカラムを作っ │
                          │           │ たときは    true   、そうでないときは │
                          │           │ false になります。                    │
                          │           │                                       │
                          │           │ 通常、インデックスカラムでない場合は  │
                          │           │ false になります。                    │
                          ├───────────┼───────────────────────────────────────┤
                          │weight     │ カラムが重み情報を保存できるかどう    │
                          │           │ か。                                  │
                          │           │                                       │
                          │           │ WITH_WEIGHT  フラグ付きでカラムを作っ │
                          │           │ たときは    true   、そうでないときは │
                          │           │ false になります。                    │
                          ├───────────┼───────────────────────────────────────┤
                          │position   │ カラムが位置情報を保存できるかどう    │
                          │           │ か。                                  │
                          │           │                                       │
                          │           │ WITH_POSITION    フラグ付きでカラムを │
                          │           │ 作ったときは true  、そうでないときは │
                          │           │ false になります。                    │
                          │           │                                       │
                          │           │ 通常、インデックスカラムでない場合は  │
                          │           │ false になります。                    │
                          ├───────────┼───────────────────────────────────────┤
                          │sources    │ インデックスカラムのソースカラム。    │
                          │           │                                       │
                          │           │ SOURCE の配列になります。             │
                          │           │                                       │
                          │           │ 通常、カラムがインデックスカラムでな  │
                          │           │ い場合は空配列になります。            │
                          ├───────────┼───────────────────────────────────────┤
                          │indexes    │ カラムのインデックス。                │
                          │           │                                       │
                          │           │ INDEX の配列です。                    │
                          ├───────────┼───────────────────────────────────────┤
                          │command    │ このカラムを作るためのGroongaコマンド │
                          │           │ 情報。                                │
                          │           │                                       │
                          │           │ COMMAND になります。                  │
                          └───────────┴───────────────────────────────────────┘

   SOURCE
       SOURCE はソースの詳細を示すオブジェクトです。:

          {
            "name":      COLUMN_NAME,
            "table":     TABLE_NAME,
            "full_name": COLUMN_NAME_WITH_TABLE_NAME
          }

       以下は SOURCE のプロパティです。

                             ┌──────────┬──────────────────────────────────┐
                             │名前      │ 説明                             │
                             ├──────────┼──────────────────────────────────┤
                             │name      │ ソースカラム名。                 │
                             │          │                                  │
                             │          │ 例: content                     │
                             │          │                                  │
                             │          │ _key  擬似カラムになるかもしれま │
                             │          │ せん。                           │
                             ├──────────┼──────────────────────────────────┤
                             │table     │ ソースカラムのテーブル名。       │
                             │          │                                  │
                             │          │ 例: Memos                       │
                             ├──────────┼──────────────────────────────────┤
                             │full_name │ テーブル名を含むソースカラム名。 │
                             │          │                                  │
                             │          │ 例: Memos.content               │
                             └──────────┴──────────────────────────────────┘

   参考
          · table_create

          · column_create

   select
   概要
       select  はテーブルから指定された条件にマッチするレコードを検索し、見つかったレコードを出力
       します。

       select は最も重要なgroongaのコマンドです。Groongaの力を最大限に活かすためには select  を理
       解する必要があります。

   構文
       このコマンドにはたくさんの引数があります。

       必須の引数は table だけです。残りは省略できます:

          select table
                 [match_columns=null]
                 [query=null]
                 [filter=null]
                 [scorer=null]
                 [sortby=null]
                 [output_columns="_id, _key, *"]
                 [offset=0]
                 [limit=10]
                 [drilldown=null]
                 [drilldown_sortby=null]
                 [drilldown_output_columns="_key, _nsubrecs"]
                 [drilldown_offset=0]
                 [drilldown_limit=10]
                 [cache=yes]
                 [match_escalation_threshold=0]
                 [query_expansion=null]
                 [query_flags=ALLOW_PRAGMA|ALLOW_COLUMN|ALLOW_UPDATE|ALLOW_LEADING_NOT|NONE]
                 [query_expander=null]
                 [adjuster=null]
                 [drilldown_calc_types=NONE]
                 [drilldown_calc_target=null]

       select には高度なドリルダウン機能のために以下の名前付き引数があります。

          · drilldown[${LABEL}].keys=null

          · drilldown[${LABEL}].sortby=null

          · drilldown[${LABEL}].output_columns="_key, _nsubrecs"

          · drilldown[${LABEL}].offset=0

          · drilldown[${LABEL}].limit=10

          · drilldown[${LABEL}].calc_types=NONE

          · drilldown[${LABEL}].calc_target=null

       ${LABEL}   には1つ以上のアルファベット、数字、  _.  を使うことができます。たとえば、
       parent.sub1 は有効な ${LABEL} です。

       同じ ${LABEL} も持つ引数は同じグループになります。

       たとえば、以下の引数は1つのドリルダウンを指定しています。

          · --drilldown[label].keys column

          · --drilldown[label].sortby -_nsubrecs

       以下の引数は2つのドリルダウンを指定しています。

          · --drilldown[label1].keys column1

          · --drilldown[label1].sortby -_nsubrecs

          · --drilldown[label2].keys column2

          · --drilldown[label2].sortby _key

   使い方
       例を使いながら select の使い方を学びましょう。このセクションではよく使われる使い方を紹介し
       ます。

       使い方を示すために使うスキーマ定義とサンプルデータは以下の通りです。

       実行例:

          table_create Entries TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entries content COLUMN_SCALAR Text
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entries n_likes COLUMN_SCALAR UInt32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entries tag COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Terms entries_key_index COLUMN_INDEX|WITH_POSITION Entries _key
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Terms entries_content_index COLUMN_INDEX|WITH_POSITION Entries content
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Entries
          [
          {"_key":    "The first post!",
           "content": "Welcome! This is my first post!",
           "n_likes": 5,
           "tag": "Hello"},
          {"_key":    "Groonga",
           "content": "I started to use Groonga. It's very fast!",
           "n_likes": 10,
           "tag": "Groonga"},
          {"_key":    "Mroonga",
           "content": "I also started to use Mroonga. It's also very fast! Really fast!",
           "n_likes": 15,
           "tag": "Groonga"},
          {"_key":    "Good-bye Senna",
           "content": "I migrated all Senna system!",
           "n_likes": 3,
           "tag": "Senna"},
          {"_key":    "Good-bye Tritonn",
           "content": "I also migrated all Tritonn system!",
           "n_likes": 3,
           "tag": "Senna"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 5]

       ブログエントリ用の      Entries     テーブルがあります。各エントリはタイトルと内容と「いい
       ね!」数、タグを持っています。タイトルは Entries のキーとします。内容は Entries.content カ
       ラムの値とします。「いいね!」数は  Entries.n_likes カラムの値とします。タグは Entries.tag
       カラムの値とします。

       Entries._key カラムと Entries.content  カラムには  TokenBigram  トークナイザーを使ったイン
       デックスを作成します。そのため、  Entries._keyEntries.content は両方とも全文検索できま
       す。

       これで例を示すためのスキーマとデータの準備ができました。

   簡単な使い方
       上記のスキーマとデータを使った一番簡単な使い方は以下の通りです。これは Entries  テーブルの
       すべてのレコードを出力します。

       実行例:

          select Entries
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         4,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

       どうしてこのコマンドがすべてのレコードを出力するのでしょうか?理由は2つです。1つ目の理由は
       このコマンドが検索条件を何も指定していないからです。検索条件を指定しないとすべてのレコード
       がマッチします。2つ目の理由は全レコード数が5だからです。 select コマンドはデフォルトでは最
       大10レコードを出力します。この例では5レコードしかありません。これは10よりも少ないのですべ
       てのレコードを出力します。

   検索条件
       検索条件は  query  または filter で指定します。 queryfilter を両方指定することもできま
       す。この場合は queryfilter の両方の条件にマッチしたレコードが出力されます。

   検索条件: query
       query  はWebページの検索ボックス用に用意されています。例えば、google.co.jpにあるような検索
       ボックスです。  query の検索条件はスペース区切りでキーワードを指定します。例えば、 検索 
       ンジン検索エンジン という2つのキーワードを含むレコードを検索します。

       通常は  query   引数は全文検索条件を指定するために使います。全文検索条件以外も指定できます
       が、その用途には filter 引数の方が向いています。

       query     引数で全文検索条件を指定する場合は、     match_columns    引数と一緒に使います。
       match_columns はどのカラムまたはインデックスを使って query を検索するかを指定します。

       以下は簡単な query の使用例です。

       実行例:

          select Entries --match_columns content --query fast
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは Entries テーブルの中から content カラムの値に  fast  を含んでいるレ
       コードを検索します。

       query             はクエリー構文という構文を使いますが、詳細はここでは説明しません。詳細は
       /reference/grn_expr/query_syntax を参照してください。

   検索条件: filter
       filter は複雑な検索条件を指定するために用意されています。ECMAScriptのような構文で   filter
       に検索条件を指定します。

       以下は簡単な filter の使用例です。

       実行例:

          select Entries --filter 'content @ "fast" && _key == "Groonga"'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは Entries テーブルの中の content カラムの値に fast という単語を含んで
       いて、かつ、 _keyGroonga のレコードを検索します。このコマンドの中には @&&== と
       いう3つの演算子があります。 @ は全文検索用の演算子です。 &&== はECMAScriptと同じ意味で
       す。 && が論理積用の演算子で == が等価演算子です。

       filter にはもっと演算子や構文があります。例えば、 (...) を使った検索条件のグループ化などで
       す。しかし、ここでは詳細は説明しません。詳細は  /reference/grn_expr/script_syntax を参照し
       てください。

   ページング
       offsetlimit  を指定することで出力されるレコードの範囲を指定できます。以下は2番目のレ
       コードだけを出力する例です。

       実行例:

          select Entries --offset 1 --limit 1
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]

       offset は0始まりです。 --offset 1 は2番目以降のレコードを出力するという意味になります。

       limit は出力レコード数の最大値を指定します。 --limit 1 は多くても1レコードを出力するという
       意味になります。もし、1つもレコードがマッチしていなければ select  コマンドはどのレコードも
       出力しません。

   全レコード数
       --limit 0 を使うとレコードの内容は取得せずに全レコード数だけを取得できます。

       実行例:

          select Entries --limit 0
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ]
          #     ]
          #   ]
          # ]

       --limit 0 はマッチしたレコード数だけを取得したいときにも便利です。

   ドリルダウン
       1回の select で検索結果だけでなく、検索結果をグループ化した結果も一緒に取得できます。SQLで
       は2回以上 SELECT を使わなければいけない場合でも、Groongaの場合は1回の select  で実現できま
       す。

       Groongaではこの機能を  ドリルダウン と呼んでいます。他の検索エンジンでは ファセット検索 と
       も呼ばれています。

       例えば、以下の状況を考えてみましょう。

       fast という単語を含むエントリーを探します。

       実行例:

          select Entries --filter 'content @ "fast"'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]

       --filter 'content @ "fast" && tag == "???" というように、追加の検索条件として tag を使いた
       いとします。しかし、 content @ "fast" の結果を見るまでは適切なタグはわかりません。

       もし、有効なタグそれぞれについてマッチするレコード数がわかれば、その中から適切なタグを選ぶ
       ことができます。このような用途のためにドリルダウンを使えます。

       実行例:

          select Entries --filter 'content @ "fast"' --drilldown tag
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ]
          #     ],
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Groonga",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

       --drilldown tag は「有効なタグ」と「そのタグを持っているレコード数」のペアをリストにして返
       します。このリストからタグを選ぶと「検索したけどヒット数0」という状況を避けることができま
       す。また、リストの中からレコード数が少ないタグを選べば「検索結果が多すぎる」という状況も避
       けることができます。

       ドリルダウン結果を使うと次のようなUIを作ることができます。

          · 検索結果を絞り込むリンク。(ユーザーはキーボードから検索クエリーを入力する必要がなく
            なります。単にリンクをクリックすればよいからです。)

       多くのECサイトではこのUIを使っています。Amazonのサイドメニューを見てください。

       Groongaはグループ化したレコードの数を数えるだけでなく、グループ化したレコードのカラムの値
       の中から最大値・最小値を見つけたり、合計値を計算したりすることができます。詳細は  ドリルダ
       ウン関連の引数 を参照してください。

   引数
       このセクションではすべての引数について説明します。引数はカテゴリわけしています。

   必須引数
       table だけが必須の引数です。

   table
       検索対象のテーブルを指定します。 table は必ず指定しなければいけません。

       存在しないテーブルを指定するとエラーが返ります。

       実行例:

          select Nonexistent
          # [
          #   [
          #     -22,
          #     1337566253.89858,
          #     0.000355720520019531,
          #     "invalid table name: <Nonexistent>",
          #     [
          #       [
          #         "grn_select",
          #         "proc.c",
          #         1217
          #       ]
          #     ]
          #   ]
          # ]

   検索関係の引数
       検索関係の引数がいくつかあります。一般的には、検索ボックスを実装するために   match_columnsquery 引数を使い、複雑な検索機能を実装するために filter 引数を使います。

       queryfilter  を指定した場合は、 queryfilter にマッチしたレコードが選択されます。
       queryfilter のどちらも指定しなかった場合はすべてのレコードが選択されます。

   match_columns
       query 引数の値で全文検索をするときに使うデフォルトの検索対象カラムを指定します。全文検索対
       象のカラムは  query  引数でも指定できます。検索対象カラムを match_columns で指定する場合と
       query で指定する場合の違いは重みとスコアー関数を指定できるかどうかです。 match_columns  で
       は指定できますが、 query では指定できません。

       重みは検索対象カラムの相対的な重要度です。重みの大きい検索対象カラムでマッチした場合は小さ
       い検索対象カラムでマッチした場合よりも多くのヒットスコアがつきます。デフォルトの重みは1で
       す。

       以下は簡単な match_columns の使用例です。

       実行例:

          select Entries --match_columns content --query fast --output_columns '_key, _score'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Groonga",
          #         1
          #       ],
          #       [
          #         "Mroonga",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

       --match_columns  content はデフォルトの全文検索対象カラムに content カラムを使用し、その重
       みは1、という意味になります。 --output_columns '_key, _score' はこの select コマンドがマッ
       チしたレコードの _key の値と _score の値を出力する、ということを指定しています。

       _score の値に注目してください。 _score の値は query 引数の値に何個マッチしたかになっていま
       す。この例では、 query 引数の値は fast です。 _score の値が1ということは content  カラムの
       中に  fast  が1つだけあるということです。  _score の値が2ということは content カラムの中に
       fast が2つあるということです。

       重みを指定するためには column * weight という構文を使います。以下は重みの使用例です。

       実行例:

          select Entries --match_columns 'content * 2' --query fast --output_columns '_key, _score'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Groonga",
          #         2
          #       ],
          #       [
          #         "Mroonga",
          #         4
          #       ]
          #     ]
          #   ]
          # ]

       --match_columns 'content  *  2'  はデフォルトの全文検索用カラムとして  content  カラムを使
       い、その重みは2という意味です。

       _score  の値に注目してください。 _score の値が2倍になっています。これは重みを2にしたからで
       す。

       デフォルトの全文検索対象カラムとして複数のカラムを指定することができます。複数のカラムを指
       定した場合はすべてのカラムに対して全文検索が行われ、ヒットスコアが積算されます。つまり、
       query  引数の値がどれか1つでも全文検索対象カラムにマッチしたら、そのレコードはマッチしたも
       のとして扱われます。

       複数のカラムを指定するには  column1 * weight1 || column2 * weight2 || ... という構文を使い
       ます。 * weight  は省略することができます。省略した場合は重みが1になります。以下は複数カラ
       ムの使用例です。

       実行例:

          select Entries --match_columns '_key * 10 || content' --query groonga --output_columns '_key, _score'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Groonga",
          #         11
          #       ]
          #     ]
          #   ]
          # ]

       --match_columns  '_key * 10 || content' はデフォルト検索対象カラムが _key カラムと content
       カラムで、 _key カラムの重みは10、  content  カラムの重みは1という意味です。この重み付けは
       _key カラムの値は content カラムの値よりも重要だという意味になります。この例では、ブログエ
       ントリのタイトルはブログエントリの内容よりも重要だということです。

       スコアー関数を指定することもできます。詳細は /reference/scorer を参照してください。

       スコアー関数と scorer パラメーターは関係ないので注意してください。

   query
       クエリーテキストを指定します。通常、全文検索をするために match_columns  引数と一緒に使いま
       す。  query  引数はWebページにある全文検索フォームで使いやすいように設計されています。クエ
       リーテキストは /reference/grn_expr/query_syntax という書式を使います。この書式はGoogleの検
       索フォームのように一般的な検索フォームと似ています。例えば、 word1 word2word1word2
       を含んでいるレコードを検索するという意味になります。 word1 OR word2word1 または  word2
       を含んでいるレコードを検索するという意味になります。

       以下は論理積を使った検索の簡単な例です。

       実行例:

          select Entries --match_columns content --query "fast groonga"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは Entries テーブルの中から content カラムの値に fastgroonga の2つ
       の単語を含んでいるレコードを検索します。

       以下は論理和を使った検索の簡単な例です。

       実行例:

          select Entries --match_columns content --query "groonga OR mroonga"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは Entries テーブルの中から content カラムの値に fast  または  groonga
       のどちらかの単語を含んでいるレコードを検索します。

       他の構文は /reference/grn_expr/query_syntax を参照してください。

       query  では全文検索だけではなく他の条件も使えます。例えば、  column:valuecolumn の値が
       value と等しいという意味です。 column:<valuecolumn の値が value より小さいという意味で
       す。

       以下は等価演算子を使った検索の簡単な例です。

       実行例:

          select Entries --query _key:Groonga
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは Entries テーブルの中から _key カラムの値が Groonga であるレコードを
       検索します。

       以下は比較演算子を使った検索の簡単な例です。

       実行例:

          select Entries --query n_likes:<11
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         4
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         4,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは Entries テーブルの中から n_likes カラムの値が 11 より小さいレコード
       を検索します。

       他の演算子は /reference/grn_expr/query_syntax を参照してください。

   filter
       フィルターテキストを指定します。通常、    filter    は複雑な条件を指定するために使います。
       filterquery 引数と一緒に使うこともできます。 filterquery  を両方指定した場合はそれ
       らを論理積で組み合わせます。つまり、マッチするレコードは  filter にも query にもマッチしな
       ければいけないということです。

       filter                          引数は複雑な条件用に設計されています。フィルターテキストは
       /reference/grn_expr/script_syntax 書式で指定します。この書式はECMAScriptに似ています。例え
       ば、 column == "value"column カラムの値が "value"  と等しいという意味です。  column  <
       valuecolumn カラムの値が value よりも小さいという意味です。

       以下は等価演算子を使った検索の簡単な例です。

       実行例:

          select Entries --filter '_key == "Groonga"'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは Entries テーブルの中から _key カラムの値が Groonga であるレコードを
       検索します。

       以下は比較演算子を使った検索の簡単な例です。

       実行例:

          select Entries --filter 'n_likes < 11'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         4
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         4,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは Entries テーブルの中から n_likes カラムの値が 11 より小さいレコード
       を検索します。

       他の演算子は /reference/grn_expr/script_syntax を参照してください。

   高度な検索のための引数
   match_escalation_threshold
       検索方法をエスカレーションするかどうかを決定するための閾値を指定します。この閾値はマッチし
       たレコード数との比較に使われます。マッチしたレコード数がこの閾値以下の場合は検索方法をエス
       カレーションします。検索方法のエスカレーションについては /spec/search を参照してください。

       デフォルトの閾値は0です。これは1つもレコードがマッチしなかったときだけ検索方法をエスカレー
       ションするということです。

       デフォルトの閾値は以下の方法でカスタマイズできます。

          · configureの --with-match-escalation-threshold オプション

          · groongaコマンドの --match-escalation-threshold オプション

          · 設定ファイルの match-escalation-threshold 設定項目

       以下は簡単な      match_escalation_threshold      の使用例です。最初の      selectmatch_escalation_threshold  引数がありません。2番目の selectmatch_escalation_threshold
       引数があります。

       実行例:

          select Entries --match_columns content --query groo
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]
          select Entries --match_columns content --query groo --match_escalation_threshold -1
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         0
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ]
          #     ]
          #   ]
          # ]

       最初の select コマンドは Entries テーブルから content カラムの値に groo という単語を含むレ
       コードを検索します。しかし、この検索ではどのレコードにもマッチしません。これは、
       TokenBigram トークナイザーは groongagr|ro|oo|on|ng|ga ではなく groonga  にトークナイズ
       するからです。(  TokenBigramSplitSymbolAlphagroongagr|ro|oo|on|ng|ga にトークナイ
       ズします。詳細は /reference/tokenizers を見てください。)つまり、 groonga はインデックスに
       登録されていますが、 groo はインデックスに登録されていないということです。インデックスに登
       録されていないので完全一致検索では groo はどのレコードにもマッチしません。このケースでは検
       索方法のエスカレーションが行われています。なぜならばマッチしたレコード数(0)が
       match_escalation_threshold (0)の値と等しいからです。非分かち書き検索では groo  で1つのレ
       コードがマッチします。

       2番目の  select コマンドも Entries テーブルから content カラムの値に groo という単語を含む
       レコードを検索します。そして、この select コマンドもマッチしません。この場合、マッチしたレ
       コード数(0)が  match_escalation_threshold (-1)より大きいので、検索方法をエスカレーショ
       ンしません。そして、1つもレコードがマッチしません。

   query_expansion
       非推奨です。代わりに query_expander を使ってください。

   query_flags
       query パラメーターの構文をカスタマイズします。デフォルトでは query  パラメーターでカラムの
       値を更新することはできません。しかし、 query_flagsALLOW_COLUMN|ALLOW_UPDATE を指定する
       ことで query でカラムの値を更新することができます。

       指定可能な値は以下の通りです。

       · ALLOW_PRAGMA

       · ALLOW_COLUMN

       · ALLOW_UPDATE

       · ALLOW_LEADING_NOT

       · NONE

       ALLOW_PRAGMA を指定すると query の先頭でプラグマを指定することができます。この機能はまだ実
       装されていません。

       ALLOW_COLUMN  を指定すると  match_columns で指定していないカラムでも検索できるように成りま
       す。カラムを指定するには COLUMN:... というような構文を使います。

       ALLOW_UPDATE を指定すると COLUMN:=NEW_VALUE という構文を使って query  でカラムの値を更新で
       きます。カラム更新用の構文ではカラムを指定する必要があるため、 ALLOW_COLUMN も一緒に指定す
       る必要があります。

       ALLOW_LEADING_NOT を指定すると -WORD  という構文を使って最初の条件として否定条件を指定でき
       ます。このクエリーは WORD にマッチしないレコードを検索します。最初の条件に否定条件を使った
       クエリーは多くの場合重いクエリーになります。これは多くのレコードにマッチするからです。その
       ため、このフラグはデフォルトでは無効になっています。もし、このフラグを使う場合は重いクエ
       リーとなるということを十分気をつけてください。

       NONE は単に無視されます。フラグを指定しないときに NONE を使えます。

       これらのフラグは ALLOW_COLUMN|ALLOW_UPDATE のように | で区切って同時に指定することができま
       す。

       デフォルト値は ALLOW_PRAGMA|ALLOW_COLUMN です。

       以下は ALLOW_COLUMN の使用例です。

       実行例:

          select Entries --query content:@mroonga --query_flags ALLOW_COLUMN
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]

       この  select コマンドは Entries テーブルの中から content カラムの値に mroonga を含んでいる
       レコードを検索します。

       以下は ALLOW_UPDATE の使用例です。

       実行例:

          table_create Users TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Users age COLUMN_SCALAR UInt32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Users
          [
          {"_key": "alice", "age": 18},
          {"_key": "bob",   "age": 20}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 2]
          select Users --query age:=19 --query_flags ALLOW_COLUMN|ALLOW_UPDATE
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "age",
          #           "UInt32"
          #         ]
          #       ],
          #       [
          #         1,
          #         "alice",
          #         19
          #       ],
          #       [
          #         2,
          #         "bob",
          #         19
          #       ]
          #     ]
          #   ]
          # ]
          select Users
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "age",
          #           "UInt32"
          #         ]
          #       ],
          #       [
          #         1,
          #         "alice",
          #         19
          #       ],
          #       [
          #         2,
          #         "bob",
          #         19
          #       ]
          #     ]
          #   ]
          # ]

       最初の select コマンドは全てのレコードの age カラムの値を 19 にします。二番目の select  コ
       マンドは age カラムの値を出力します。

       以下は ALLOW_LEADING_NOT の使用例です。

       実行例:

          select Entries --match_columns content --query -mroonga --query_flags ALLOW_LEADING_NOT
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         4
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         4,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

       この  select コマンドは Entries テーブルの中から content カラムの値に mroonga を含んでいな
       いレコードを検索します。

       以下は NONE の使用例です。

       実行例:

          select Entries --match_columns content --query 'mroonga OR _key:Groonga' --query_flags NONE
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]

       この select  コマンドは  Entries  テーブルの中から  content  カラムの値に  mroonga  または
       _key:Groonga  のどちらかの単語を含んでいるレコードを検索します。 _key:Groonga_key カラ
       ムの値が Groonga という条件にはならないことに注意してください。これは ALLOW_COLUMN  フラグ
       が指定されていないからです。

       /reference/grn_expr/query_syntax も見てください。

   query_expander
       クエリー展開用の引数です。クエリー展開はクエリー中の特定の単語を別の単語に置換します。通常
       は類義語検索に使います。

       query               引数の値を置換するために使うカラムを指定します。この引数の値の書式は「
       ${TABLE}.${COLUMN}  」です。例えば、 「 Terms.synonym 」は Terms テーブルの synonym カラム
       を指定しています。

       クエリー展開用のテーブルを「置換テーブル」と呼びます。置換テーブルのキーは ShortText  にし
       てください。そのため、配列テーブル(   TABLE_NO_KEY   )は置換テーブルに使うことはできませ
       ん。なぜなら、配列テーブルにはキーがないからです。

       クエリー展開用のカラムを「置換カラム」と呼びます。置換カラムの値の型は ShortText  にしてく
       ださい。カラムの種類はベクター( COLUMN_VECTOR )にしてください。

       クエリー展開はクエリーの中にある置換テーブルのキーを置換カラムの値で置換します。  query の
       中にある単語が置換テーブルのキーだったら、キーに対応する置換カラムの値でその単語を置換しま
       す。置換は再帰的に実行しません。これは、置換されたクエリー内に置換対象の単語があっても置換
       されないということです。

       以下は query_expander の簡単な使用例を示すためのサンプル置換テーブルです。

       実行例:

          table_create Thesaurus TABLE_PAT_KEY ShortText --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Thesaurus synonym COLUMN_VECTOR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Thesaurus
          [
          {"_key": "mroonga", "synonym": ["mroonga", "tritonn", "groonga mysql"]},
          {"_key": "groonga", "synonym": ["groonga", "senna"]}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 2]

       Thesaurus  置換テーブルは2つの類義語があります。  "mroonga""groonga"  です。ユーザが
       "mroonga" で検索すると、Groongaは "((mroonga) OR (tritonn) OR (groonga mysql))" で検索しま
       す。ユーザーが "groonga" で検索すると、Groongaは "((groonga) OR (senna))" で検索します。

       通常、置換テーブルにはノーマライザーを指定したほうがよいです。たとえば、ノーマライザーを指
       定すると、置換対象の単語に対して大文字小文字区別せずにマッチするようになります。利用可能な
       ノーマライザーは /reference/normalizers を参照してください。

       これらの類義語の値の中に "mroonga""groonga" といったキーの値も含まれていることに注意し
       てください。このように類義語にキーの値も含めることを推奨します。もしキーの値を含めない
       と、置換した値には元の置換対象の値が含まれません。通常、元の値が含まれていた方がよい検索結
       果になります。もし、検索してほしくない単語がある場合は、元の単語を含めないでください。例え
       ば、空のベクター値を指定することで「ストップワード」機能を実現することもできます。

       以下は簡単な query_expander の使用例です。

       実行例:

          select Entries --match_columns content --query "mroonga"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]
          select Entries --match_columns content --query "mroonga" --query_expander Thesaurus.synonym
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]
          select Entries --match_columns content --query "((mroonga) OR (tritonn) OR (groonga mysql))"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

       最初の select コマンドはクエリー展開を使いません。そのため、 "tritonn"  という単語を含んで
       いるレコードは見つかりません。2番目の  select コマンドはクエリー展開を使っています。そのた
       め、 "tritonn" という単語を含んでいるレコードが見つかります。3番目の select コマンドはクエ
       リー展開を使っていませんが、2番目の  select  コマンドと同じ結果になります。これは、3番目の
       select コマンドは展開後のクエリーを使っているからです。

       それぞれの置換する値は (...)OR  といった  /reference/grn_expr/query_syntax  を使えま
       す。これらの構文を使うことにより複雑な置換をすることができます。

       以下はクエリー構文を使った複雑な置換の使用例です。

       実行例:

          load --table Thesaurus
          [
          {"_key": "popular", "synonym": ["popular", "n_likes:>=10"]}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 1]
          select Entries --match_columns content --query "popular" --query_expander Thesaurus.synonym
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]

       この  load  コマンドは新しく  "popular" という類義語を登録しています。これは ((popular) OR
       (n_likes:>=10)) に置換されます。置換されたクエリーは、「popular」というのは「popular」とい
       う単語を含んでいるか10以上の「いいね!」数を持つエントリという意味になります。

       この select コマンドは Entries テーブルの中から n_likes カラムの値が 10 以上のレコードを出
       力します。

   出力関連の引数
   output_columns
       出力するカラムを , 区切りで指定します。

       以下は簡単な output_columns の使用例です。

       実行例:

          select Entries --output_columns '_id, _key' --limit 1
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは _id_key カラムの値だけを出力します。

       * は特別な値で /reference/columns/pseudo 以外のすべてのカラムという意味です。

       以下は * の使用例です。

       実行例:

          select Entries --output_columns '_key, *' --limit 1
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         5,
          #         "Hello"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは _key 擬似カラム、 content カラム、  n_likes  カラムの値を出力します
       が、 _id 擬似カラムの値は出力しません。

       デフォルト値は  _id,  _key, * です。これは _score 以外の全てのカラムを出力するという意味で
       す。

   sortby
       ソートキーを , 区切りで指定します。それぞれのソートキーはカラム名を指定します。

       以下は簡単な sortby の使用例です。

       実行例:

          select Entries --sortby 'n_likes, _id'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         4,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは n_likes カラムの値で昇順にソートします。 n_likes の値が同じレコード
       については  _id カラムの値で昇順にソートします。 "Good-bye Senna""Good-bye Tritonn"_id カラムの値でソートしているケースです。

       降順でソートしたい場合はカラム名の前に - をつけてください。

       以下は降順の sortby の使用例です。

       実行例:

          select Entries --sortby '-n_likes, _id'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         4,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは n_likes カラムの値で降順にソートします。しかし、 _id でソートすると
       きは昇順でソートします。

       もし、  query または filter 引数を使っているときは、 sortby の中で _score 擬似カラムを使う
       ことができます。

       実行例:

          select Entries --match_columns content --query fast --sortby -_score --output_columns '_key, _score'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Mroonga",
          #         2
          #       ],
          #       [
          #         "Groonga",
          #         1
          #       ]
          #     ]
          #   ]
          # ]

       この  select  コマンドはマッチしたレコードをヒットスコアで降順にソートし、レコードのキーと
       ヒットスコアを出力します。

       query 引数も filter 引数も指定しないで _score を使った場合は、 _score を無視して、ログファ
       イルに警告を出力します。

   offset
       出力するレコードの範囲を決めるためのオフセットを指定します。オフセットは0始まりです。
       --offset 1 は2番目以降のレコードを出力するという意味になります。

       実行例:

          select Entries --sortby _id --offset 3 --output_columns _key
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "Good-bye Senna"
          #       ],
          #       [
          #         "Good-bye Tritonn"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは4番目以降のレコードを出力します。

       負の値を指定することもできます。負の値の場合は  マッチしたレコード数 + offset 番目のレコー
       ドから始まる範囲という意味になります。もし、マッチしたレコードが3つあり、 --offset -2 を指
       定した場合は2番目( 3 + -2 = 11 は2番目という意味です。オフセットは0始まりということを
       思い出してください。) のレコードから3番目のレコードを取得します。

       実行例:

          select Entries --sortby _id --offset -2 --output_columns _key
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "Good-bye Senna"
          #       ],
          #       [
          #         "Good-bye Tritonn"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは4番目以降のレコードを出力します。なぜなら、全レコード数が 5 だからで
       す。

       デフォルト値は 0 です。

   limit
       limit は出力レコード数の最大値を指定します。 もし、マッチしたレコード数が limit よりも小さ
       い場合はすべてのレコードが出力されます。

       以下は簡単な limit の使用例です。

       実行例:

          select Entries --sortby _id --offset 2 --limit 3 --output_columns _key
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "Mroonga"
          #       ],
          #       [
          #         "Good-bye Senna"
          #       ],
          #       [
          #         "Good-bye Tritonn"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは3番目、4番目、5番目のレコードを出力します。

       負の値を指定することもできます。負の値の場合は、最大で マッチしたレコード数 + limit + 1 件
       のレコードを出力するという意味になります。  例えば、 --limit -1 はすべてのレコードを出力し
       ます。これはすべてのレコードを表示する場合にとても便利です。

       以下は負の値を使った limit の簡単な使用例です。

       実行例:

          select Entries --limit -1
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         4,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドはすべてのレコードを出力します。

       デフォルト値は 10 です。

   scorer
       TODO: write in English and add example.

       検索条件にマッチする全てのレコードに対して適用するgrn_exprをscript形式で指定します。

       scorerは、検索処理が完了し、ソート処理が実行される前に呼び出されます。従って、各レコードの
       スコアを操作する式を指定しておけば、検索結果のソート順序をカスタマイズできるようになりま
       す。

   ドリルダウン関連の引数
       このセクションでは基本的なドリルダウン関連の引数について説明します。高度なドリルダウン関連
       の引数は他のセクションで説明します。

   drilldown
       グループ化するときに使うキーを , 区切りで指定します。

       指定した検索条件にマッチしたレコードを指定したキーのそれぞれでグループ化します。検索条件を
       指定していない場合はすべてのレコードを指定したキーのそれぞれでグループ化します。

       以下は簡単な drilldown の使用例です。

       実行例:

          select Entries \
            --output_columns _key,tag \
            --drilldown tag
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "The first post!",
          #         "Hello"
          #       ],
          #       [
          #         "Groonga",
          #         "Groonga"
          #       ],
          #       [
          #         "Mroonga",
          #         "Groonga"
          #       ],
          #       [
          #         "Good-bye Senna",
          #         "Senna"
          #       ],
          #       [
          #         "Good-bye Tritonn",
          #         "Senna"
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Hello",
          #         1
          #       ],
          #       [
          #         "Groonga",
          #         2
          #       ],
          #       [
          #         "Senna",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは次の情報を出力します。

          · 「Hello」タグを持つレコードが1つある。

          · 「Groonga」タグを持つレコードが2つある。

          · 「Senna」タグを持つレコードが2つある。

       以下は検索条件付きで drilldown を使う例です。

       実行例:

          select Entries \
            --output_columns _key,tag \
            --filter 'n_likes >= 5' \
            --drilldown tag
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "The first post!",
          #         "Hello"
          #       ],
          #       [
          #         "Groonga",
          #         "Groonga"
          #       ],
          #       [
          #         "Mroonga",
          #         "Groonga"
          #       ]
          #     ],
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Hello",
          #         1
          #       ],
          #       [
          #         "Groonga",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは次の情報を出力します。

          · n_likes の値が5以上のレコードの中には…

            · 「Hello」タグを持つレコードが1つある。

            · 「Groonga」タグを持つレコードが2つある。

       以下は複数のグループ化キーを指定する drilldown の例です。

       実行例:

          select Entries \
            --limit 0 \
            --output_column _id \
            --drilldown tag,n_likes
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Hello",
          #         1
          #       ],
          #       [
          #         "Groonga",
          #         2
          #       ],
          #       [
          #         "Senna",
          #         2
          #       ]
          #     ],
          #     [
          #       [
          #         4
          #       ],
          #       [
          #         [
          #           "_key",
          #           "UInt32"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         5,
          #         1
          #       ],
          #       [
          #         10,
          #         1
          #       ],
          #       [
          #         15,
          #         1
          #       ],
          #       [
          #         3,
          #         2
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは次の情報を出力します。

          · tag について:

            · 「Hello」タグを持つレコードが1つある。

            · 「Groonga」タグを持つレコードが2つある。

            · 「Senna」タグを持つレコードが2つある。

          · n_likes について:

            · 「Hello」タグを持つレコードが1つある。

            · 「Groonga」タグを持つレコードが2つある。

            · 「Senna」タグを持つレコードが2つある。

   drilldown_sortby
       ドリルダウン結果のソートキーを ,  区切りで指定します。それぞれのソートキーはカラム名を指定
       します。

       グループ化されたレコード数は  _nsubrecs  /reference/columns/pseudo  擬似カラムで参照できま
       す。

       以下は簡単な drilldown_sortby の使用例です。

       実行例:

          select Entries \
            --limit 0 \
            --output_column _id \
            --drilldown 'tag, n_likes' \
            --drilldown_sortby '-_nsubrecs, _key'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Groonga",
          #         2
          #       ],
          #       [
          #         "Senna",
          #         2
          #       ],
          #       [
          #         "Hello",
          #         1
          #       ]
          #     ],
          #     [
          #       [
          #         4
          #       ],
          #       [
          #         [
          #           "_key",
          #           "UInt32"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         3,
          #         2
          #       ],
          #       [
          #         5,
          #         1
          #       ],
          #       [
          #         10,
          #         1
          #       ],
          #       [
          #         15,
          #         1
          #       ]
          #     ]
          #   ]
          # ]

       ドリルダウン結果は「グループに含まれるレコード数」(= _nsubrecs )で降順にソートします。「
       グループに含まれるレコード数」が同じグループが複数あった場合は、グループ化に使ったキー(=
       _key )で昇順にソートします。

       drilldown で指定したすべてのグループキーで同じソートキーを使います。

       実行例:

          select Entries \
            --limit 0 \
            --output_column _id \
            --drilldown 'tag, n_likes' \
            --drilldown_sortby '-_nsubrecs, _key'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Groonga",
          #         2
          #       ],
          #       [
          #         "Senna",
          #         2
          #       ],
          #       [
          #         "Hello",
          #         1
          #       ]
          #     ],
          #     [
          #       [
          #         4
          #       ],
          #       [
          #         [
          #           "_key",
          #           "UInt32"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         3,
          #         2
          #       ],
          #       [
          #         5,
          #         1
          #       ],
          #       [
          #         10,
          #         1
          #       ],
          #       [
          #         15,
          #         1
          #       ]
          #     ]
          #   ]
          # ]

       tag のドリルダウンでも n_likes のドリルダウンでも同じソートキーを使っています。

       それぞれのドリルダウンで異なるソートキーを使いたい場合は  高度なドリルダウン関連のパラメー
       ター を参照してください。

   drilldown_output_columns
       ドリルダウン結果から出力するカラムを , 区切りで指定します。

       以下は drilldown_output_columns の使用例です。

       実行例:

          select Entries \
            --limit 0 \
            --output_column _id \
            --drilldown tag \
            --drilldown_output_columns _key
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "Hello"
          #       ],
          #       [
          #         "Groonga"
          #       ],
          #       [
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドはグループ化したキーを出力していくだけです。

       グループ化したキーが参照型のカラム(型がテーブルのカラム)だった場合、参照型のカラムが参照
       しているテーブルのカラムにもアクセスできます。

       参照型に対してドリルダウンする方法を示すために使うスキーマ定義とサンプルデータは以下の通り
       です。

       実行例:

          table_create Tags TABLE_HASH_KEY ShortText --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Tags label COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Tags priority COLUMN_SCALAR Int32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Items TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Items tag COLUMN_SCALAR Tags
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Tags
          [
          {"_key": "groonga", label: "Groonga", priority: 10},
          {"_key": "mroonga", label: "Mroonga", priority: 5}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 2]
          load --table Items
          [
          {"_key": "A", "tag": "groonga"},
          {"_key": "B", "tag": "groonga"},
          {"_key": "C", "tag": "mroonga"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]

       Tags テーブルは参照されているテーブルです。 Items.tag は参照型のカラムです。

       Tags.labeldrilldown_output_columns の中では label で参照できます。

       実行例:

          select Items \
            --limit 0 \
            --output_column _id \
            --drilldown tag \
            --drilldown_output_columns '_key, label'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "tag",
          #           "Tags"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "label",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         "groonga",
          #         "Groonga"
          #       ],
          #       [
          #         "mroonga",
          #         "Mroonga"
          #       ]
          #     ]
          #   ]
          # ]

       * を使うと、参照されているテーブル(= Tags )のすべてのカラムを参照できます。

       実行例:

          select Items \
            --limit 0 \
            --output_column _id \
            --drilldown tag \
            --drilldown_output_columns '_key, *'
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "tag",
          #           "Tags"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "label",
          #           "ShortText"
          #         ],
          #         [
          #           "priority",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "groonga",
          #         "Groonga",
          #         10
          #       ],
          #       [
          #         "mroonga",
          #         "Mroonga",
          #         5
          #       ]
          #     ]
          #   ]
          # ]

       *label, priority に展開されます。

       drilldown_output_columns のデフォルト値は _key, _nsubrecs です。グループ化に使ったキーとグ
       ループのレコード数を出力する、ということです。

       drilldown_calc_types を使うと、 drilldown_output_columns の中で _max_min_sum_avg        といった        /reference/columns/pseudo       も使えるようになります。詳細は
       drilldown_calc_types のドキュメントを参照してください。

   drilldown_offset
       ドリルダウン結果を出力するレコードの範囲を決めるためのオフセットを指定します。オフセット
       は0始まりです。 --offset 1 は2番目以降のレコードを出力するという意味になります。

       以下は簡単な drilldown_offset の使用例です。

       実行例:

          select Entries \
            --limit 0 \
            --output_column _id \
            --drilldown tag \
            --drilldown_sortby _key \
            --drilldown_offset 1
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Hello",
          #         1
          #       ],
          #       [
          #         "Senna",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは2番目以降のレコードを出力します。

       負の値を指定することもできます。負の値の場合は  グループの数 + offset 番目のレコードから始
       まる範囲という意味になります。もし、グループの数が3つあり、  --offset  -2   を指定した場合
       は1番目(  3  +  -2  = 11 は2番目です。オフセットは0始まりということを思い出してくださ
       い。) のグループから3番目のグループが出力されます。

       実行例:

          select Entries \
            --limit 0 \
            --output_column _id \
            --drilldown tag \
            --drilldown_sortby _key \
            --drilldown_offset -2
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Hello",
          #         1
          #       ],
          #       [
          #         "Senna",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは2番目以降のグループを出力します。なぜなら、全グループ数が 3 だからで
       す。

       drilldown_offset のデフォルト値は 0 です。

   drilldown_limit
       drilldown_limit  は出力グループ数の最大値を指定します。もし、グループ数 limit よりも小さい
       場合はすべてのグループが出力されます。

       以下は drilldown_limit の使用例です。

       実行例:

          select Entries \
            --limit 0 \
            --output_column _id \
            --drilldown tag \
            --drilldown_sortby _key \
            --drilldown_offset 1 \
            --drilldown_limit 2
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Hello",
          #         1
          #       ],
          #       [
          #         "Senna",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは2番目、3番目のレコードを出力します。

       負の値を指定することもできます。負の値の場合は、最大で       マッチしたレコード数        +
       drilldown_limit      +     1     件のレコードを出力するという意味になります。     例えば、
       --drilldown_limit -1  はすべてのレコードを出力します。これはすべてのレコードを表示する場合
       にとても便利です。

       以下は drilldown_limit に負の値を指定する例です。

       実行例:

          select Entries \
            --limit 0 \
            --output_column _id \
            --drilldown tag \
            --drilldown_sortby _key \
            --drilldown_limit -1
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "Groonga",
          #         2
          #       ],
          #       [
          #         "Hello",
          #         1
          #       ],
          #       [
          #         "Senna",
          #         2
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドはすべてのグループを出力します。

       drilldown_limit のデフォルト値は 10 です。

   drilldown_calc_types
       ドリルダウンでグループ内のレコードの値を計算(集計)する方法を指定します。「  , 」で区切る
       ことで複数の計算タイプを指定することもできます。たとえば、 MAX,MIN といった具合です。

       計算対象の値はグループ内のレコードのカラムから取得します。このカラムは
       drilldown_calc_target で指定します。

       計算した値は     drilldown_output_columns     の中で     _max_min     のような
       /reference/columns/pseudo を指定すると取得できます。

       以下の計算タイプを使えます。

          ┌─────────┬───────────────────────────┬───────────────────────┬────────────────────┐
          │タイプ名 │ /reference/columns/pseudodrilldown_calc_target │ 説明               │
          │         │ 名                        │ が必要か              │                    │
          ├─────────┼───────────────────────────┼───────────────────────┼────────────────────┤
          │NONE     │ なし。                    │ 必要ない。            │ 無視されます。     │
          ├─────────┼───────────────────────────┼───────────────────────┼────────────────────┤
          │COUNT_nsubrecs                 │ 必要ない。            │ グループ内のレコー │
          │         │                           │                       │ ドの数を数える。常 │
          │         │                           │                       │ に有効なので指定す │
          │         │                           │                       │ る必要はない。     │
          ├─────────┼───────────────────────────┼───────────────────────┼────────────────────┤
          │MAX_max                      │ 必要。                │ グループ内のレコー │
          │         │                           │                       │ ドの整数値の中で最 │
          │         │                           │                       │ 大の値を見つける。 │
          ├─────────┼───────────────────────────┼───────────────────────┼────────────────────┤
          │MIN_min                      │ 必要。                │ グループ内のレコー │
          │         │                           │                       │ ドの整数値の中で最 │
          │         │                           │                       │ 小の値を見つける。 │
          ├─────────┼───────────────────────────┼───────────────────────┼────────────────────┤
          │SUM_sum                      │ 必要。                │ グループ内のレコー │
          │         │                           │                       │ ドの整数値の合計を │
          │         │                           │                       │ 計算する。         │
          ├─────────┼───────────────────────────┼───────────────────────┼────────────────────┤
          │AVG_avg                      │ 必要。                │ グループ内のレコー │
          │         │                           │                       │ ドの整数値・浮動小 │
          │         │                           │                       │ 数点数値の平均を計 │
          │         │                           │                       │ 算する。           │
          └─────────┴───────────────────────────┴───────────────────────┴────────────────────┘

       以下は MAX の使用例です。

       実行例:

          select Entries \
            --limit -1 \
            --output_column _id,n_likes \
            --drilldown tag \
            --drilldown_calc_types MAX \
            --drilldown_calc_target n_likes \
            --drilldown_output_columns _key,_max
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         4,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_max",
          #           "Int64"
          #         ]
          #       ],
          #       [
          #         "Hello",
          #         5
          #       ],
          #       [
          #         "Groonga",
          #         15
          #       ],
          #       [
          #         "Senna",
          #         3
          #       ]
          #     ]
          #   ]
          # ]

       この select  コマンドは  tag  カラムの値ですべてのレコードをグループ化します。その後、各グ
       ループについて最大の n_likes カラムの値を探し、「グループ化に使ったキー」と「 n_likes カラ
       ムの値の最大値」のペアのリストを出力します。  n_likes   カラムの値の最大値を参照するために
       _max /reference/columns/pseudo を使っています。

       以下は MIN の使用例です。

       実行例:

          select Entries \
            --limit -1 \
            --output_column _id,n_likes \
            --drilldown tag \
            --drilldown_calc_types MIN \
            --drilldown_calc_target n_likes \
            --drilldown_output_columns _key,_min
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         4,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_min",
          #           "Int64"
          #         ]
          #       ],
          #       [
          #         "Hello",
          #         5
          #       ],
          #       [
          #         "Groonga",
          #         10
          #       ],
          #       [
          #         "Senna",
          #         3
          #       ]
          #     ]
          #   ]
          # ]

       この  select  コマンドは  tag カラムの値ですべてのレコードをグループ化します。その後、各グ
       ループについて最小の n_likes カラムの値を探し、「グループ化に使ったキー」と「 n_likes カラ
       ムの値の最小値」のペアのリストを出力します。   n_likes  カラムの値の最小値を参照するために
       _min /reference/columns/pseudo を使っています。

       以下は SUM の使用例です。

       実行例:

          select Entries \
            --limit -1 \
            --output_column _id,n_likes \
            --drilldown tag \
            --drilldown_calc_types SUM \
            --drilldown_calc_target n_likes \
            --drilldown_output_columns _key,_sum
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         4,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_sum",
          #           "Int64"
          #         ]
          #       ],
          #       [
          #         "Hello",
          #         5
          #       ],
          #       [
          #         "Groonga",
          #         25
          #       ],
          #       [
          #         "Senna",
          #         6
          #       ]
          #     ]
          #   ]
          # ]

       この select  コマンドは  tag  カラムの値ですべてのレコードをグループ化します。その後、各グ
       ループについて n_likes カラムの合計を計算し、「グループ化に使ったキー」と「 n_likes カラム
       の値の合計」のペアのリストを出力します。  n_likes  カラムの値の合計を参照するために   _sum
       /reference/columns/pseudo を使っています。

       以下は AVG の使用例です。

       実行例:

          select Entries \
            --limit -1 \
            --output_column _id,n_likes \
            --drilldown tag \
            --drilldown_calc_types AVG \
            --drilldown_calc_target n_likes \
            --drilldown_output_columns _key,_avg
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         4,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_avg",
          #           "Float"
          #         ]
          #       ],
          #       [
          #         "Hello",
          #         5.0
          #       ],
          #       [
          #         "Groonga",
          #         12.5
          #       ],
          #       [
          #         "Senna",
          #         3.0
          #       ]
          #     ]
          #   ]
          # ]

       この  select  コマンドは  tag カラムの値ですべてのレコードをグループ化します。その後、各グ
       ループについて n_likes カラムの平均を計算し、「グループ化に使ったキー」と「 n_likes カラム
       の値の平均」のペアのリストを出力します。   n_likes  カラムの値の合計を参照するために  _avg
       /reference/columns/pseudo を使っています。

       以下はすべての計算タイプを使う例です。

       実行例:

          select Entries \
            --limit -1 \
            --output_column _id,n_likes \
            --drilldown tag \
            --drilldown_calc_types MAX,MIN,SUM,AVG \
            --drilldown_calc_target n_likes \
            --drilldown_output_columns _key,_nsubrecs,_max,_min,_sum,_avg
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         4,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ]
          #     ],
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_nsubrecs",
          #           "Int32"
          #         ],
          #         [
          #           "_max",
          #           "Int64"
          #         ],
          #         [
          #           "_min",
          #           "Int64"
          #         ],
          #         [
          #           "_sum",
          #           "Int64"
          #         ],
          #         [
          #           "_avg",
          #           "Float"
          #         ]
          #       ],
          #       [
          #         "Hello",
          #         1,
          #         5,
          #         5,
          #         5,
          #         5.0
          #       ],
          #       [
          #         "Groonga",
          #         2,
          #         15,
          #         10,
          #         25,
          #         12.5
          #       ],
          #       [
          #         "Senna",
          #         2,
          #         3,
          #         3,
          #         6,
          #         3.0
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドは複数の計算タイプを MAX,MIN,SUM,AVG というように「 , 」で区切って指定
       しています。    drilldown_output_columnsCOUNT   を指定していなくても   _nsubrecs
       /reference/columns/pseudo を使えます。これは、 COUNT は常に有効だからです。

       drilldown_calc_types のデフォルト値は NONE です。これは、 COUNT だけが有効になっているとい
       う意味です。なぜなら、 NONE は単に無視されて、 COUNT は常に有効だからです。

   drilldown_calc_target
       drilldown_calc_types の計算対象のカラムを指定します。

       drilldown_calc_typesMAX のように計算対象のカラムが必要な計算タイプを指定したにも関わら
       ず drilldown_calc_target を省略すると、計算結果は常に 0 になります。

       --drilldown_calc_target     n_likes      というように1つのカラム名だけしか指定できません。
       --drilldown_calc_target _key,n_likes というように複数のカラムを指定することはできません。

       --drilldown_calc_target  reference_column.nested_reference_column.value  というように「  .
       」でつなげることで対象レコードから参照している値を使うことができます。

       drilldown_calc_target の使い方は drilldown_calc_types を参照してください。

       drilldown_calc_target のデフォルト値は null です。これは計算対象カラムは何も指定されていな
       いということです。

   高度なドリルダウン関連のパラメーター
       drilldown   に複数のグループキーを指定することで複数のドリルダウン結果を取得できます。しか
       し、すべてのドリルダウンで同じ設定を使う必要があります。例えば、すべてのドリルダウンで同じ
       drilldown_output_columns の値が使われます。

       以下の引数を使うことで、各ドリルダウンで別々の設定を使うことができます。

          · drilldown[${LABEL}].keys

          · drilldown[${LABEL}].sortby

          · drilldown[${LABEL}].output_columns

          · drilldown[${LABEL}].offset

          · drilldown[${LABEL}].limit

          · drilldown[${LABEL}].calc_types

          · drilldown[${LABEL}].calc_target

       ${LABEL} は変数です。 ${LABEL} には次の文字を使うことができます。

          · アルファベット

          · 数字

          · .

          · _

       注釈:
          他の文字も使えますが、これらの文字だけを使ってください。

       同じ  ${LABEL} の値を持つ引数は同じグループになります。1つのドリルダウンで同じグループの引
       数を一緒に使います。

       例えば、以下の引数は2つのグループにわかれます。

          · --drilldown[label1].keys _key

          · --drilldown[label1].output_columns _nsubrecs

          · --drilldown[label2].keys tag

          · --drilldown[label2].output_columns _key,_nsubrecs

       drilldown[label1].keysdrilldown[label1].output_columns     が同じグループです。
       drilldown[label2].keysdrilldown[label2].output_columns は別のグループです。

       label1 グループでは、グループキーとして _key を使って、出力カラムとして _nsubrecs を使いま
       す。

       label2 グループでは、グループキーとして tag を使って、出力カラムとして _key,_nsubrecs を使
       います。

       以下の引数の使い方は対応する drilldown_XXX 引数のドキュメントを参照してください。

          · drilldown[${LABEL}].sortby: drilldown_sortby

          · drilldown[${LABEL}].offset: drilldown_offset

          · drilldown[${LABEL}].limit: drilldown_limit

          · drilldown[${LABEL}].calc_types: drilldown_calc_types

          · drilldown[${LABEL}].calc_target: drilldown_calc_target

       以下の引数は追加の説明が必要です。

          · drilldown[${LABEL}].keys

          · drilldown[${LABEL}].output_columns

       出力フォーマットは少し違います。これも追加の説明が必要です。

   drilldown[${LABEL}].keys
       drilldown  は複数のキーを指定して複数のドリルダウンを指定できます。しかし、1つのドリルダウ
       ンに複数のキーを指定することはできません。

       drilldown[${LABEL}].keys  は複数のキーを指定して複数のドリルダウンを指定することはできませ
       ん。しかし、1つのドリルダウンに複数のキーを指定することができます。

       複数のキーを , 区切りで指定します。

       以下は tag カラムと n_likes カラムの値を使った複数キーでのグループ化の例です。

       実行例:

          select Entries \
            --limit -1 \
            --output_column tag,n_likes \
            --drilldown[tag.n_likes].keys tag,n_likes \
            --drilldown[tag.n_likes].output_columns _value.tag,_value.n_likes,_nsubrecs
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         4,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ]
          #     ],
          #     {
          #       "tag.n_likes": [
          #         [
          #           4
          #         ],
          #         [
          #           [
          #             "tag",
          #             "ShortText"
          #           ],
          #           [
          #             "n_likes",
          #             "UInt32"
          #           ],
          #           [
          #             "_nsubrecs",
          #             "Int32"
          #           ]
          #         ],
          #         [
          #           "Hello",
          #           5,
          #           1
          #         ],
          #         [
          #           "Groonga",
          #           10,
          #           1
          #         ],
          #         [
          #           "Groonga",
          #           15,
          #           1
          #         ],
          #         [
          #           "Senna",
          #           3,
          #           2
          #         ]
          #       ]
          #     }
          #   ]
          # ]

       tag.n_likes はドリルダウン引数グループのラベルです。グループ化に使ったそれぞれのキーを参照
       するときは drilldown[${LABEL}].output_columns_value.${KEY_NAME} という構文を使います。
       ${KEY_NAME}           にはグループキーを指定したときに使ったカラム名を使います。この場合は
       ${KEY_NAME}tagn_keys を使います。

       --drilldown[tag].keys tag のように drilldown[${LABEL}].keys  にキーを1つだけしか指定してい
       ない場合は  _value.${KEY_NAME}  構文を使うことはできません。この場合は _key を使ってくださ
       い。これは、 drilldown_output_columns と同じルールです。

   drilldown[${LABEL}].output_columns
       drilldown[${LABEL}].output_columns   はほとんど   drilldown_output_columns    と同じです。
       drilldown_output_columnsdrilldown[${LABEL}].output_columns の違いはグループキーの参照
       方法です。

       drilldown_output_columns はグループキーを参照するために _key /reference/columns/pseudo  を
       使います。  drilldown[${LABEL}].output_columnsdrilldown[${LABEL}].keys で1つだけしかグ
       ループキーを指定していない場合は、グループキーを参照するために                        _key
       /reference/columns/pseudo を使います。

       以下は1つだけ指定したグループキーを参照するために  _key /reference/columns/pseudo を使う例
       です。

       実行例:

          select Entries \
            --limit 0 \
            --output_column _id \
            --drilldown[tag.n_likes].keys tag,n_likes \
            --drilldown[tag.n_likes].output_columns _value.tag,_value.n_likes
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     {
          #       "tag.n_likes": [
          #         [
          #           4
          #         ],
          #         [
          #           [
          #             "tag",
          #             "ShortText"
          #           ],
          #           [
          #             "n_likes",
          #             "UInt32"
          #           ]
          #         ],
          #         [
          #           "Hello",
          #           5
          #         ],
          #         [
          #           "Groonga",
          #           10
          #         ],
          #         [
          #           "Groonga",
          #           15
          #         ],
          #         [
          #           "Senna",
          #           3
          #         ]
          #       ]
          #     }
          #   ]
          # ]

       drilldown[${LABEL}].output_columns          で各グループキーを参照するために          _key
       /reference/columns/pseudo   を使うことはできません。  _value.${KEY_NAME}  構文を使います。
       ${KEY_NAME} には drilldown[${LABEL}].keys でグループキーを指定するために使ったカラム名を使
       います。

       以下は複数のグループキーを使ったときに _value.${KEY_NAME} 構文でそれぞれのグループキーを参
       照する例です。

       実行例:

          select Entries \
            --limit 0 \
            --output_column _id \
            --drilldown[tag.n_likes].keys tag,n_likes \
            --drilldown[tag.n_likes].output_columns _value.tag,_value.n_likes
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ]
          #     ],
          #     {
          #       "tag.n_likes": [
          #         [
          #           4
          #         ],
          #         [
          #           [
          #             "tag",
          #             "ShortText"
          #           ],
          #           [
          #             "n_likes",
          #             "UInt32"
          #           ]
          #         ],
          #         [
          #           "Hello",
          #           5
          #         ],
          #         [
          #           "Groonga",
          #           10
          #         ],
          #         [
          #           "Groonga",
          #           15
          #         ],
          #         [
          #           "Senna",
          #           3
          #         ]
          #       ]
          #     }
          #   ]
          # ]

       ちなみに:
          どうして _value.${KEY_NAME} 構文なの?

          これは実装よりの情報です。

          _key           はベクターの値です。このベクターの値はすべてのグループキーから成ります。
          drilldown[${LABEL}].output_columns_key を参照するとこのベクターの値のバイト列を確認
          することができます。

          drilldown[${LABEL}].keys に複数のグループキーを指定したとき、各グループの値を参照するた
          めに _value にグループのレコードが1つだけ保存されています。そのため、各グループキーを参
          照するために _value.${KEY_NAME} 構文を使えます。

          一方、 drilldown[${LABEL}].keys に1つのグループキーしか指定していない場合は、 _value に
          グループのレコードを保存しません。そのため、  _value.${KEY_NAME} 構文でグループキーを参
          照できません。

   drilldown[${LABEL}] スタイルの出力フォーマット
       drilldowndrilldown[${LABEL}].keys には出力フォーマットに違いがあります。 drilldown  は
       複数のドリルダウン結果を出力するために配列を使います。  drilldown[${LABEL}].keys  は「ラベ
       ル」と「ドリルダウン結果」のペアの集まりを使います。

       drilldown の出力フォーマットは以下の通りです:

          [
            HEADER,
            [
              SEARCH_RESULT,
              DRILLDOWN_RESULT1,
              DRILLDOWN_RESULT2,
              ...
            ]
          ]

       drilldown[${LABEL}].keys の出力フォーマットは以下の通りです:

          [
            HEADER,
            [
              SEARCH_RESULT,
              {
                "LABEL1": DRILLDOWN_RESULT1,
                "LABEL2": DRILLDOWN_RESULT2,
                ...
              }
            ]
          ]

   キャッシュ関連の引数
   cache
       このクエリーの結果をキャッシュするかどうかを指定します。

       このクエリーの結果がキャッシュしてあると、次に同じクエリーを実行するときはキャッシュを使っ
       て高速にレスポンスを返すことができます。

       これは既存のキャッシュされた結果を使うかどうかを指定するものではありません。

       指定可能な値は以下の通りです。

                               ┌──────┬──────────────────────────────────┐
                               │Value │ 説明                             │
                               ├──────┼──────────────────────────────────┤
                               │no    │ このクエリーの出力をキャッシュし │
                               │      │ ない。                           │
                               ├──────┼──────────────────────────────────┤
                               │yes   │ このクエリーの出力をキャッシュす │
                               │      │ る。デフォルト値。               │
                               └──────┴──────────────────────────────────┘

       このクエリーの結果をキャッシュしないようにする例です。

       実行例:

          select Entries --cache no
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "n_likes",
          #           "UInt32"
          #         ],
          #         [
          #           "tag",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         5,
          #         "Hello"
          #       ],
          #       [
          #         2,
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         10,
          #         "Groonga"
          #       ],
          #       [
          #         3,
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         15,
          #         "Groonga"
          #       ],
          #       [
          #         4,
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         3,
          #         "Senna"
          #       ],
          #       [
          #         5,
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         3,
          #         "Senna"
          #       ]
          #     ]
          #   ]
          # ]

       デフォルト値は yes です。

   スコアー関連の引数
       スコアー関連のパラメーターは adjuster だけです。

   adjuster
       1つ以上のスコアー調整式(score  adjust expression)を指定します。 adjusterquery または
       filter と一緒に使います。検索しないリクエストでは adjuster は動きません。

       adjuster  を使うと特定のレコードのスコアーを増やすことができます。重要なレコードに高いスコ
       アーをつけるために adjuster を使えます。

       例えば、 groonga タグがついたレコードのスコアーを増やすために adjuster を使えます。

       以下が構文です:

          --adjuster "SCORE_ADJUST_EXPRESSION1 + SCORE_ADJUST_EXPRESSION2 + ..."

       以下が SCORE_ADJUST_EXPRESSION の構文です:

          COLUMN @ "KEYWORD" * FACTOR

       以下のことに注意してください:

          · COLUMN にはインデックスが張っていないといけません。

          · "KEYWORD" は文字列でないといけません。

          · FACTOR は正の整数でないといけません。

       以下は1つだけ SCORE_ADJUST_EXPRESSION を使った adjuster の使用例です。

       実行例:

          select Entries \
            --filter true \
            --adjuster 'content @ "groonga" * 5' \
            --output_columns _key,content,_score
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         1
          #       ],
          #       [
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         6
          #       ],
          #       [
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         1
          #       ],
          #       [
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         1
          #       ],
          #       [
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         1
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドはすべてのレコードにマッチします。それから、 adjuster を適用します。こ
       のアジャスターは Entries.content カラムの中に "groonga"  を含むレコードのスコアーを5増やし
       ます。  Entries.content カラムに "groonga" が含まれているレコードは1つだけです。 "Groonga"
       というキーのレコードです。このレコードのスコアーは6( = 1 + 5 )になります。

       FACTOR は省略できます。 FACTOR を省略すると、1を指定したとみなします。

       FACTOR を省略した adjuster の使用例です。

       実行例:

          select Entries \
            --filter true \
            --adjuster 'content @ "groonga"' \
            --output_columns _key,content,_score
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         1
          #       ],
          #       [
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         2
          #       ],
          #       [
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         1
          #       ],
          #       [
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         1
          #       ],
          #       [
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         1
          #       ]
          #     ]
          #   ]
          # ]

       この select  コマンドの  adjusterFACTOR  がありません。そのため、係数は1になります。
       Entries.content  カラムに "groonga" を含むレコードは1つだけです。キーが "Groonga" のレコー
       ドです。このレコードのスコアーは2( = 1 + 1 )になります。

       複数の SCORE_ADJUST_EXPRESSION を使った adjuster の使用例です。

       実行例:

          select Entries \
            --filter true \
            --adjuster 'content @ "groonga" * 5 + content @ "started" * 3' \
            --output_columns _key,content,_score
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         5
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "content",
          #           "Text"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "The first post!",
          #         "Welcome! This is my first post!",
          #         1
          #       ],
          #       [
          #         "Groonga",
          #         "I started to use Groonga. It's very fast!",
          #         9
          #       ],
          #       [
          #         "Mroonga",
          #         "I also started to use Mroonga. It's also very fast! Really fast!",
          #         4
          #       ],
          #       [
          #         "Good-bye Senna",
          #         "I migrated all Senna system!",
          #         1
          #       ],
          #       [
          #         "Good-bye Tritonn",
          #         "I also migrated all Tritonn system!",
          #         1
          #       ]
          #     ]
          #   ]
          # ]

       この select コマンドの adjuster には2つの SCORE_ADJUST_EXPRESSION があります。最終的なスコ
       アーの増分はすこれらの  SCORE_ADJUST_EXPRESSION のスコアーの合計になります。この select コ
       マンドのすべての SCORE_ADJUST_EXPRESSION はキーが "Groonga" のレコードに適用されます。その
       ため、このレコードの最終的なスコアーの増分はすべての  SCORE_ADJUST_EXPRESSION の合計になり
       ます。

       最初の SCORE_ADJUST_EXPRESSIONcontent @ "groonga" * 5  です。これは、スコアーを5増やし
       ます。

       2番目の SCORE_ADJUST_EXPRESSIONcontent @ "started" * 3 です。これはスコアーを3増やしま
       す。

       最終的なスコアーの増分は9( = 1 + 5 + 3 )です。

       1つの SCORE_ADJUST_EXPRESSION"KEYWORD" に対して1つの係数を持ちます。これは、 "KEYWORD"
       を持つすべてのレコードでスコアーの増加分は同じということです。  "KEYWORD" を持つそれぞれの
       レコード毎にスコアーの増加分を変えることができます。これは検索スコアーをチューニングすると
       きに便利です。詳細は weight-vector-column を参照してください。

   戻り値
       select は以下のフォーマットのレスポンスを返します:

          [
            HEADER,
            [
              SEARCH_RESULT,
              DRILLDOWN_RESULT_1,
              DRILLDOWN_RESULT_2,
              ...,
              DRILLDOWN_RESULT_N
            ]
          ]

       select が失敗すると、 HEADER にエラーの詳細が含まれます。

       HEADER については /reference/command/output_format を参照してください。

       0個以上の DRILLDOWN_RESULT があります。もし、 drilldowndrilldown[${LABEL}].keys も指定
       していない場合、次のように DRILLDOWN_RESULT は出力されません:

          [
            HEADER,
            [
              SEARCH_RESULT
            ]
          ]

       --drilldown "_key, column1, column2" というように drilldown  に2つ以上のキーがある場合、複
       数の DRILLDOWN_RESULT が存在します:

          [
            HEADER,
            [
              SEARCH_RESULT,
              DRILLDOWN_RESULT_FOR_KEY,
              DRILLDOWN_RESULT_FOR_COLUMN1,
              DRILLDOWN_RESULT_FOR_COLUMN2
            ]
          ]

       もし drilldown[${LABEL}].keys を使っているなら、 DRILLDOWN_RESULT が1つだけ存在します:

          [
            HEADER,
            [
              SEARCH_RESULT,
              DRILLDOWN_RESULT_FOR_LABELED_DRILLDOWN
            ]
          ]

       DRILLDOWN_RESULT のフォーマットは drilldowndrilldown[${LABEL}].keys で違います。これに
       ついては後述します。

       SEARCH_RESULT は以下のフォーマットです:

          [
            [N_HITS],
            COLUMNS,
            RECORDS
          ]

       このフォーマットの具体例は 簡単な使い方 を見てください。

       N_HITSlimit を適用する前のマッチしたレコード数です。

       COLUMNSoutput_columns で指定した出力カラムの情報を表しています。これは次のフォーマット
       になっています:

          [
            [COLUMN_NAME_1, COLUMN_TYPE_1],
            [COLUMN_NAME_2, COLUMN_TYPE_2],
            ...,
            [COLUMN_NAME_N, COLUMN_TYPE_N]
          ]

       COLUMNS  は1つ以上の出力カラムの情報を含んでいます。各出力カラムの情報は次の情報を含んでい
       ます。

          · カラム名(文字列)

          · カラムの型(文字列または null )

       カラム名は output_columns で指定された値から抽出しています。

       カラムの方はGroongaでの型名または null  です。カラムがベクターかスカラーかの情報は持ってい
       ません。実際のカラムの値が配列かどうかで判断する必要があります。

       型の詳細は /reference/types を見てください。

       null     になるときはカラムの値の型を決められないときです。たとえば、     --output_columns
       "snippet_html(content)" というように output_columns の中で関数呼び出しを使ったときは  null
       になります。

       以下は COLUMNS の使用例です:

          [
            ["_id",     "UInt32"],
            ["_key",    "ShortText"],
            ["n_likes", "UInt32"],
          ]

       RECORDS  はマッチした各レコードのカラムの値を含んでいます。  RECORDS  に含まれるレコードは
       offsetlimit で選択されたレコードです。 RECORDS は次のフォーマットです:

          [
            [
              RECORD_1_COLUMN_1,
              RECORD_1_COLUMN_2,
              ...,
              RECORD_1_COLUMN_N
            ],
            [
              RECORD_2_COLUMN_1,
              RECORD_2_COLUMN_2,
              ...,
              RECORD_2_COLUMN_N
            ],
            ...
            [
              RECORD_N_COLUMN_1,
              RECORD_N_COLUMN_2,
              ...,
              RECORD_N_COLUMN_N
            ]
          ]

       以下は RECORDS の例です:

          [
            [
              1,
              "The first post!",
              5
            ],
            [
              2,
              "Groonga",
              10
            ],
            [
              3,
              "Mroonga",
              15
            ]
          ]

       DRILLDOWN_RESULT のフォーマットは drilldowndrilldown[${LABEL}].keys で違います。

       drilldownSEARCH_RESULT と同じフォーマットです:

          [
            [N_HITS],
            COLUMNS,
            RECORDS
          ]

       drilldown で1つ以上のキーを指定すると、 drilldown は1つ以上の DRILLDOWN_RESULT  を出力しま
       す。

       drilldown[${LABEL}].keys   は次のフォーマットを使います。複数の   drilldown[${LABEL}].keys
       は1つのオブジェクト(キーと値のペアの集合)になります:

          {
            "LABEL_1": [
              [N_HITS],
              COLUMNS,
              RECORDS
            ],
            "LABEL_2": [
              [N_HITS],
              COLUMNS,
              RECORDS
            ],
            ...,
            "LABEL_N": [
              [N_HITS],
              COLUMNS,
              RECORDS
            ]
          }

       各 drilldown[${LABEL}].keys は次の部分に対応します:

          "LABEL": [
            [N_HITS],
            COLUMNS,
            RECORDS
          ]

       以下の値の部分は SEARCH_RESULT と同じフォーマットです:

          [
            [N_HITS],
            COLUMNS,
            RECORDS
          ]

       drilldown[${LABEL}] スタイルのドリルダウンの出力形式については drilldown[${LABEL}]  スタイ
       ルの出力フォーマット も見てください。

   参考
          · /reference/grn_expr/query_syntax

          · /reference/grn_expr/script_syntax

   shutdown
   概要
       shutdown はGroongaサーバープロセスを終了します。

       shutdown はデフォルトではgraceful shutdownを使います。もし、実行中のコマンドがあるならそれ
       らのコマンドが終了してからGroongaサーバープロセスを終了します。 shutdown  コマンドを実行し
       た後は新しいコマンドを実行されません。

       バージョン  6.0.1  で追加: shutdownmode パラメーターに immediate を指定するとimmediate
       shutdownを使います。たとえ実行中のコマンドがあってもGroongaサーバープロセスをすぐに終了し
       ます。

       注釈:
          immediate shutdownを使うにはすべてのリクエストに /reference/command/request_id を設定す
          る必要があります。

   構文
       このコマンドの引数は1つで省略できます:

          shutdown [mode=graceful]

   使い方
       shutdown はデフォルトではgraceful shutdownを使います。

       実行例:

          shutdown
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       明示的に mode パラメーターに graceful を指定することもできます。

       実行例:

          shutdown --mode graceful
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       mode パラメーターに immediate を指定することでimmediate shutdownを使うことができます。

       実行例:

          shutdown --mode immediate
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       immediate         shutdownはgraceful          shutdownする時間がないときに便利です。たとえ
       ば、WindowsはWindowsをシャットダウンするときに時間内に終了しないサービスを強制終了します。

   引数
       このセクションではこのコマンドのパラメーターを説明します。

   必須引数
       必須の引数はありません。

   省略可能引数
       いくつか省略可能な引数があります。

   mode
       シャットダウンのモードを指定します。利用可能なモードは次の通りです。

                             ┌──────────┬──────────────────────────────────┐
                             │Value     │ 説明                             │
                             ├──────────┼──────────────────────────────────┤
                             │graceful  │ 実行中のコマンドが終了してから終 │
                             │          │ 了します。                       │
                             │          │                                  │
                             │          │ これがデフォルトです。           │
                             ├──────────┼──────────────────────────────────┤
                             │immediate │ バージョン 6.0.1 で追加:  実行中 │
                             │          │ のコマンドがあってもすぐに終了し │
                             │          │ ます。                           │
                             └──────────┴──────────────────────────────────┘

   戻り値
       shutdown はシャットダウンを受け付けたときは以下のようにボディが true になります。:

          [HEADER, true]

       shutdown がシャットダウンを受け付けなかったら HEADER にエラーの詳細が含まれます。

       HEADER については /reference/command/output_format を参照してください。

   status
   概要
       status はこのリクエストを処理しているコンテキストの現在のステータスを返します。

       コンテキストはリクエストを処理する単位です。通常、各スレッドごとにコンテキストを作ります。

   構文
       このコマンドに引数はありません:

          status

   使い方
       以下は簡単な使用例です。

       実行例:

          status
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   {
          #     "uptime": 0,
          #     "max_command_version": 2,
          #     "start_time": 1441980651,
          #     "cache_hit_rate": 0.0,
          #     "version": "5.0.7-126-gb6fd7f7",
          #     "alloc_count": 206,
          #     "command_version": 1,
          #     "starttime": 1441980651,
          #     "default_command_version": 1,
          #     "n_queries": 0
          #   }
          # ]

       このリクエストを処理しているコンテキストの現在のステータスを返します。詳細は 戻り値 を参照
       してください。

   引数
       このセクションではすべての引数について説明します。

   必須引数
       必須の引数はありません。

   省略可能引数
       省略可能な引数はありません。

   戻り値
       このコマンドはオブジェクトとして現在のステータスを返します。:

          [
            HEADER,
            {
              "alloc_count": ALLOC_COUNT,
              "cache_hit_rate": CACHE_HIT_RATE,
              "command_version": COMMAND_VERSION,
              "default_command_version": DEFAULT_COMMAND_VERSION,
              "max_command_version": MAX_COMMAND_VERSION,
              "n_queries": N_QUERIES,
              "start_time": START_TIME,
              "starttime": STARTTIME,
              "uptime": UPTIME,
              "version": VERSION
            }
          ]

       HEADER については /reference/command/output_format を参照してください。

       以下は値の説明です。実際の値は 使い方 を参照してください。

              ┌────────────────────────┬────────────────────────────────────┬────────────┐
              │キー                    │ 説明                               │ 例         │
              ├────────────────────────┼────────────────────────────────────┼────────────┤
              │alloc_count             │ まだ解放されていないメモ           │ 1400       │
              │                        │ リーブロックの数です。も           │            │
              │                        │ し、この値が継続的に増え           │            │
              │                        │ ていっているならメモリー           │            │
              │                        │ リークがあるかもしれませ           │            │
              │                        │ ん。                               │            │
              ├────────────────────────┼────────────────────────────────────┼────────────┤
              │cache_hit_rate          │ このGroongaプロセスが              │ 29.4       │
              │                        │ キャッシュを使って返した           │            │
              │                        │ レスポンスの割合です。も           │            │
              │                        │ し、10リクエストのう               │            │
              │                        │ ち7つのレスポンスは                │            │
              │                        │ キャッシュを使ったなら、           │            │
              │                        │ cache_hit_rate70.0           │            │
              │                        │ になります。この割合は             │            │
              │                        │ キャッシュをサポートして           │            │
              │                        │ いるコマンドを使ったリク           │            │
              │                        │ エストのみで計算します。           │            │
              │                        │                                    │            │
              │                        │ 以下はキャッシュをサポー           │            │
              │                        │ トしているコマンドです。           │            │
              │                        │                                    │            │
              │                        │           · select                 │            │
              │                        │                                    │            │
              │                        │           · logical_select         │            │
              │                        │                                    │            │
              │                        │           · logical_range_filter   │            │
              │                        │                                    │            │
              │                        │           · logical_count          │            │
              ├────────────────────────┼────────────────────────────────────┼────────────┤
              │command_version         │ このコンテキストが使っている       │ 1          │
              │                        │ /reference/command/command_version │            │
              │                        │ です。                             │            │
              ├────────────────────────┼────────────────────────────────────┼────────────┤
              │default_command_version │ このGroongaプロセスのデフォルト    │ 1          │
              │                        │ /reference/command/command_version │            │
              │                        │ です。                             │            │
              ├────────────────────────┼────────────────────────────────────┼────────────┤
              │max_command_version     │ このGroongaプロセスがサポートして  │ 2          │
              │                        │ いる最大                           │            │
              │                        │ /reference/command/command_version │            │
              │                        │ です。                             │            │
              ├────────────────────────┼────────────────────────────────────┼────────────┤
              │n_queries               │ このGroongaプロセスが処理したリク  │ 29         │
              │                        │ エスト数です。ただし、キャッシュを │            │
              │                        │ サポートしたコマンドを使ったリクエ │            │
              │                        │ ストだけを数えます。               │            │
              │                        │                                    │            │
              │                        │ 以下はキャッシュをサポートしている │            │
              │                        │ コマンドです。                     │            │
              │                        │                                    │            │
              │                        │           · select                 │            │
              │                        │                                    │            │
              │                        │           · logical_select         │            │
              │                        │                                    │            │
              │                        │           · logical_range_filter   │            │
              │                        │                                    │            │
              │                        │           · logical_count          │            │
              ├────────────────────────┼────────────────────────────────────┼────────────┤
              │start_time              │ バージョン 5.0.8 で追加.           │ 1441761403 │
              │                        │                                    │            │
              │                        │                                    │            │
              │                        │ このGroongaプロセスが起動した時間  │            │
              │                        │ です。UNIX時間です。               │            │
              ├────────────────────────┼────────────────────────────────────┼────────────┤
              │starttime               │ バージョン 5.0.8 で撤廃:  代わりに │ 1441761403 │
              │                        │ start_time を使ってください。      │            │
              ├────────────────────────┼────────────────────────────────────┼────────────┤
              │uptime                  │ このGroongaプロセスが起動してから  │ 216639     │
              │                        │ 経過した時間です。単位は秒です。   │            │
              │                        │                                    │            │
              │                        │ たとえば、  2166392.5   (= │            │
              │                        │ 216639 / 60 / 60 / 24 = 2.507 )日 │            │
              │                        │ という意味です。                   │            │
              ├────────────────────────┼────────────────────────────────────┼────────────┤
              │version                 │ このGroongaプロセスのバージョンで  │ 5.0.7      │
              │                        │ す。                               │            │
              └────────────────────────┴────────────────────────────────────┴────────────┘

   suggest
       注釈:
          サジェスト機能の仕様はまだ確定していません。仕様は変更される可能性があります。

   概要
       suggest - 指定されたクエリーに対する補完・補正・提案候補を返す。

       suggestコマンドは指定されたクエリーに対する補完・補正・提案候補を返します。

       補完・補正・提案については /reference/suggest/introduction を参照してください。

   構文
          suggest types table column query [sortby [output_columns [offset [limit [frequency_threshold [conditional_probability_threshold [prefix_search]]]]]]]

   使い方
       以下は補完用の学習データです。

       実行例:

          load --table event_query --each 'suggest_preparer(_id, type, item, sequence, time, pair_query)'
          [
          {"sequence": "1", "time": 1312950803.86057, "item": "e"},
          {"sequence": "1", "time": 1312950803.96857, "item": "en"},
          {"sequence": "1", "time": 1312950804.26057, "item": "eng"},
          {"sequence": "1", "time": 1312950804.56057, "item": "engi"},
          {"sequence": "1", "time": 1312950804.76057, "item": "engin"},
          {"sequence": "1", "time": 1312950805.86057, "item": "engine", "type": "submit"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 6]

       以下は補正用の学習データです。

       実行例:

          load --table event_query --each 'suggest_preparer(_id, type, item, sequence, time, pair_query)'
          [
          {"sequence": "2", "time": 1312950803.86057, "item": "s"},
          {"sequence": "2", "time": 1312950803.96857, "item": "sa"},
          {"sequence": "2", "time": 1312950804.26057, "item": "sae"},
          {"sequence": "2", "time": 1312950804.56057, "item": "saer"},
          {"sequence": "2", "time": 1312950804.76057, "item": "saerc"},
          {"sequence": "2", "time": 1312950805.76057, "item": "saerch", "type": "submit"},
          {"sequence": "2", "time": 1312950809.76057, "item": "serch"},
          {"sequence": "2", "time": 1312950810.86057, "item": "search", "type": "submit"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 8]

       以下は提案用の学習データです。

       実行例:

          load --table event_query --each 'suggest_preparer(_id, type, item, sequence, time, pair_query)'
          [
          {"sequence": "3", "time": 1312950803.86057, "item": "search engine", "type": "submit"},
          {"sequence": "3", "time": 1312950808.86057, "item": "web search realtime", "type": "submit"}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 2]

       以下は補完例です。

       実行例:

          suggest --table item_query --column kana --types complete --frequency_threshold 1 --query en
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   {
          #     "complete": [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "engine",
          #         1
          #       ]
          #     ]
          #   }
          # ]

       以下は補正例です。

       実行例:

          suggest --table item_query --column kana --types correct --frequency_threshold 1 --query saerch
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   {
          #     "correct": [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "search",
          #         1
          #       ]
          #     ]
          #   }
          # ]

       以下は提案例です。

       実行例:

          suggest --table item_query --column kana --types suggest --frequency_threshold 1 --query search
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   {
          #     "suggest": [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "search engine",
          #         1
          #       ],
          #       [
          #         "web search realtime",
          #         1
          #       ]
          #     ]
          #   }
          # ]

       以下は補完・補正・提案を混ぜた例です。

       実行例:

          suggest --table item_query --column kana --types complete|correct|suggest --frequency_threshold 1 --query search
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   {
          #     "suggest": [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "search engine",
          #         1
          #       ],
          #       [
          #         "web search realtime",
          #         1
          #       ]
          #     ],
          #     "complete": [
          #       [
          #         2
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "search",
          #         2
          #       ],
          #       [
          #         "search engine",
          #         2
          #       ]
          #     ],
          #     "correct": [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "search",
          #         2
          #       ]
          #     ]
          #   }
          # ]

   引数
       types  suggestコマンドでどの種類の候補を返すかを指定します。

              指定できる種類は以下の通りです。

                 complete
                        補完を実行します。

                 correct
                        補正を実行します。

                 suggest
                        提案を実行します。

              1つ以上の種類を指定できます。複数の種類を指定する場合は  | で区切ります。以下が例で
              す。:
                 補正候補を返します:

                     correct

                 補正候補と提案候補を返します:

                     correct|suggest

                 補完候補と補正候補と提案候補を返します:

                     complete|correct|suggest

       table  item_${データセット名} というフォーマットのテーブル名を指定します。例えば、以下のコ
              マンドでデータセットを作成した場合はテーブル名として item_query を指定します:

                 groonga-suggest-create-dataset /tmp/db-path query

       column table  で指定したテーブルにあるふりがな情報を含むカラムを指定します。ふりがなはカタ
              カナで指定します。

       query  補完・補正・提案対象のクエリーを指定します。

       sortby ソートキーを指定します。

              Default:
                     -_score

       output_columns
              出力するカラムを指定します。

              Default:
                     _key,_score

       offset 返されるレコードのオフセットを指定します。

              Default:
                     0

       limit  返されるレコード数を指定します。

              Default:
                     10

       frequency_threshold
              出現頻度に対する閾値を指定します。返されるレコードの          _score           値は
              frequency_threshold 以上になります。

              Default:
                     100

       conditional_probability_threshold
          条件付き確率に対する閾値を指定します。学習データに対して条件付き確率を使います。ここで
          使う条件付き確率は、入力した   query   と同じ入力があったときにクエリが検索された確率で
          す。返されるレコードの条件付き確率は conditional_probability_threshold 以上になります。

          Default:
                 0.2

       prefix_search
              補完時に前方一致検索を実行するかどうかを指定します。

              指定可能な値は以下の通りです。

                 yes    常に前方一致検索を実行します。

                 no     前方一致検索を実行しません。

                 auto   他の検索でレコードが見つからない場合のみ前方一致検索を実行します。

              Default:
                     auto

       similar_search
              補正時に類似検索を実行するかどうかを指定します。

              指定可能な値は以下の通りです。

                 yes    常に類似検索を実行します。

                 no     類似検索を実行しません。

                 auto   他の検索でレコードが見つからない場合のみ類似検索を実行します。

              Default:
                     auto

   戻り値
       返されるJSON形式は以下の通りです:

          {"type1": [["candidate1", score of candidate1],
                     ["candidate2", score of candidate2],
                     ...],
           "type2": [["candidate1", score of candidate1],
                     ["candidate2", score of candidate2],
                     ...],
           ...}

       type
          types で指定した値。

       candidate
          補完・補正・提案候補。

       score of candidate
          対応する candidate のスコアです。スコアが高いほど補完・補正・提案候補として有力という意
          味になります。デフォルトでは候補は score of candidate の降順でソートされています。

   参考
       · /reference/suggest

       · /reference/executables/groonga-suggest-create-dataset

   table_create
   概要
       table_create  は現在のデータベースに新しいテーブルを作成します。データを保存したり検索した
       りするために、1つ以上のテーブルを作成する必要があります。

   構文
       このコマンドにはたくさんの引数があります。

       必須の引数は name だけで、残りは省略できます:

          table_create name
                       [flags=TABLE_HASH_KEY]
                       [key_type=null]
                       [value_type=null]
                       [default_tokenizer=null]
                       [normalizer=null]
                       [token_filters=null]

   使い方
       table_create            コマンドは新しく永続テーブルを作成します。テーブルの詳細については
       /reference/tables を参照してください。

   データ保存用テーブルの作成
       データ保存用のテーブルにはどの種類のテーブルでも使えます。テーブルの種類については
       /reference/tables を参照してください。

       テーブルの型は TABLE_${TYPE}flags 引数に指定します。

       以下は TABLE_NO_KEY テーブルを使う例です。

       実行例:

          table_create Logs TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       この table_create コマンドは Logs という名前で TABLE_NO_KEY 型のテーブルを作成します。

       キーでレコードを検索しないのであれば、   TABLE_NO_KEY   型のテーブルが適切です。なぜなら、
       TABLE_NO_KEY  はキーをサポートしていませんが、速くて小さいサイズのテーブルだからです。ログ
       をGroongaのデータベースに保存するという使い方はこのケースです。

       キーでレコードを検索したり、カラムからレコードを参照したりする場合は、 TABLE_NO_KEY 型は適
       していません。全文検索用の語彙表として使うケースはこのケースです。

   大きなデータ保存用テーブルの作成
       たくさんの大きなキーを保存したいとき、テーブルにすべてのキーを保存できないかもしれませ
       ん。もし、総キーデータが4GiBより大きいなら、デフォルトではすべてのキーデータをテーブルに保
       存できません。

       KEY_LARGE フラグを使うと4GiBから1TiBに最大総キーサイズを拡張できます。 KEY_LARGE  フラグは
       TABLE_HASH_KEY   を使っているときだけ使えます。   KEY_LARGE   フラグは   TABLE_NO_KEYTABLE_PAT_KEYTABLE_DAT_KEY と一緒に使えません。

       以下はたくさんの大きなキーを保存することができるテーブルを作る例です。

       実行例:

          table_create Paths TABLE_HASH_KEY|KEY_LARGE ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       この table_create コマンドは、名前が PathsTABLE_HASH_KEY  型のテーブルを作成します。
       Paths テーブルはたくさんの大きなキーを保存できます。

   語彙表テーブルの作成
       語彙表テーブル用のテーブルには TABLE_NO_KEY 以外の型のテーブルを使います。語彙表テーブルは
       キーをサポートしていないといけませんが、 TABLE_NO_KEY はキーをサポートしていません。

       以下は TABLE_PAT_KEY テーブルを作る例です。

       実行例:

          table_create Lexicon TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       この table_create コマンドは以下のテーブルを作成します。

       · このテーブルは Lexicon という名前です。

       · このテーブルは TABLE_PAT_KEY 型のテーブルです。

       · このテーブルのキーは ShortText 型です。

       · このテーブルは正規化されたテキストからトークンを抽出するために  TokenBigram   トークナイ
         ザーを使います。

       · このテーブルはテキストを正規化するために NormalizerAuto ノーマライザーを使います。

       語彙表テーブルには  TABLE_PAT_KEY が適切なテーブルの型です。語彙表テーブルは全文検索に使わ
       れます。

       全文検索では、あいまい検索をするために前方一致検索を使っています。前方一致検索は
       TABLE_PAT_KEYTABLE_DAT_KEY がサポートしています。

       全文検索対象のテキストには大量のトークンが含まれるので、語彙表テーブルのキーも大量になりま
       す。大量のキーを格納するテーブルの場合はテーブルのサイズを意識する必要があります。これ
       は、大きなテーブルはそれだけ多くのメモリーを必要とするからです。多くのメモリーが必要になる
       と、ディスクI/Oが発生することもあります。ディスクI/Oが発生すると高速に検索できなくなりま
       す。そのため、大量のキーがあるテーブルの場合はテーブルのサイズが重要になります。
       TABLE_PAT_KEYTABLE_DAT_KEY よりもテーブルのサイズが小さいです。

       上記の理由から、 TABLE_PAT_KEY が語彙表テーブルに適したテーブルの型です。

   タグインデックス用テーブルの作成
       タグインデックス用のテーブルには TABLE_NO_KEY 以外の型のテーブルを使えます。タグインデック
       ス用のテーブルはキーのサポートが必要ですが、 TABLE_NO_KEY はキーをサポートしていません。

       以下は TABLE_HASH_KEY 型のテーブルを作る例です。

       実行例:

          table_create Tags TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       この table_create コマンドは Tags という名前で TABLE_HASH_KEY 型のテーブルを作ります。この
       テーブルのキーは ShortText 型です。

       タグインデックス用のテーブルには TABLE_HASH_KEY あるいは TABLE_DAT_KEY  が適切なテーブルの
       型です。

       完全一致でタグを検索する機能だけが必要なら、  TABLE_HASH_KEY  が適切です。多くの場合はこの
       ケースです。

       もし、前方一致検索機能も必要な場合(例えば、 "gr" というキーワードで "groonga"  を検索する
       場合)は、 TABLE_DAT_KEY が適切です。 TABLE_DAT_KEY はサイズの大きなテーブルですが、タグの
       数はそれほど多くならないので、サイズは重要ではありません。

   範囲検索用のインデックステーブルの作成
       範囲検索用のインデックステーブルには TABLE_PAT_KEY 型と TABLE_DAT_KEY 型を使えます。範囲検
       索用のインデックステーブルは範囲検索をサポートしている必要がありますが、 TABLE_NO_KEY 型と
       TABLE_HASH_KEY 型はサポートしていません。

       以下は TABLE_DAT_KEY テーブルを作成する例です。

       実行例:

          table_create Ages TABLE_DAT_KEY UInt32
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       この table_create コマンドは Ages という名前で TABLE_DAT_KEY  型のテーブルを作成します。こ
       のテーブルのキーの型は UInt32 です。

       範囲検索用のインデックステーブルには TABLE_PAT_KEY 型と TABLE_DAT_KEY 型が適切なテーブルの
       型です。

       インデックス対象の項目が少なければ、    TABLE_DAT_KEY     型が適切です。前述の例では、年齢
       (age)用のインデックスがこのケースになります。年齢のインデックスはせいぜい0から100項目く
       らいにしかなりません。これは、人はそんなに長生きできないからです。

       インデックス対象が大量にある場合は、 TABLE_PAT_KEY 型が適切です。なぜなら、  TABLE_PAT_KEY
       型は TABLE_DAT_KEY 型よりもサイズが小さいからです。

   引数
       このセクションではすべての引数について説明します。

   name
       作成するテーブル名を指定します。 name は必ず指定しなければいけません。

       利用可能な文字は以下の通りです。

       · 0 .. 9 (数字)

       · a .. z (アルファベット。小文字)

       · A .. Z (アルファベット。大文字)

       · # (シャープ)

       · @ (アットマーク)

       · - (ハイフン)

       · _ (アンダースコア)(注: 最初の文字としてアンダースコアを使うことはできません。)

       上記の文字を1つ以上使って名前を決めます。  _name というように、最初の文字に _ を使えないこ
       とに注意してください。

   flags
       テーブルの型とテーブルをカスタマイズするオプションを指定します。

       指定可能なフラグは以下の通りです。

                          ┌───────────────┬──────────────────────────────────┐
                          │フラグ         │ 説明                             │
                          ├───────────────┼──────────────────────────────────┤
                          │TABLE_NO_KEY   │ 配列テーブル。  table-no-key  参 │
                          │               │ 照。                             │
                          ├───────────────┼──────────────────────────────────┤
                          │TABLE_HASH_KEY │ ハッシュテーブル。               │
                          │               │ table-hash-key 参照。            │
                          ├───────────────┼──────────────────────────────────┤
                          │TABLE_PAT_KEY  │ パトリシアトライ。 table-pat-key │
                          │               │ 参照。                           │
                          ├───────────────┼──────────────────────────────────┤
                          │TABLE_DAT_KEY  │ ダブル配列トライ。 table-dat-key │
                          │               │ 参照。                           │
                          ├───────────────┼──────────────────────────────────┤
                          │KEY_WITH_SIS   │ 半無限文字列を有効にします。     │
                          │               │ TABLE_PAT_KEY と使う必要がありま │
                          │               │ す。                             │
                          ├───────────────┼──────────────────────────────────┤
                          │KEY_LARGE      │ 最大総キーサイズを4GiBから1TiBへ │
                          │               │ 拡張します。 TABLE_HASH_KEY と使 │
                          │               │ う必要があります。               │
                          └───────────────┴──────────────────────────────────┘

       注釈:
          Groonga 2.1.0から KEY_NORMALIZE フラグは非推奨になりました。代わりに、 normalizer  オプ
          ションに NormalizerAuto を指定してください。

       TABLE_${TYPE}  フラグのどれか1つを指定します。 TABLE_${TYPE} フラグを2つ以上指定することは
       できません。例えば、 TABLE_NO_KEY|TABLE_HASH_KEY は不正な指定方法です。

       TABLE_PAT_KEY|KEY_WITH_SIS というように、 | (縦棒)で複数のフラグを組み合わせることができ
       ます。

       それぞれのテーブルの型の違いは /reference/tables を参照してください。

       デフォルトのフラグは TABLE_HASH_KEY です。

   key_type
       キーの型を指定します。

       flags  パラメーターに  TABLE_HASH_KEYTABLE_PAT_KEY または TABLE_DAT_KEY を指定した場合
       は、 key_type オプションを指定する必要があります。

       型の一覧は /reference/types にあります。

       デフォルト値はありません。

   value_type
       値の型を指定します。

       flags パラメーターに TABLE_NO_KEYTABLE_HASH_KEY または TABLE_PAT_KEY  を指定した場合は
       「値」を使うことができます。「値」の型は固定長でなければいけません。例えば、 UInt32 は使え
       ますが、 ShortText は使えません。この場合は値ではなく、カラムを使ってください。

       デフォルト値はありません。

   default_tokenizer
       デフォルトトークナイザーを指定します。これは、検索時とデータロード時に使われます。

       テーブルを全文検索インデックスの語彙表として使う場合は default_tokenizer  を指定しなければ
       いけません。利用可能なトークナイザーは  /reference/tokenizers を参照してください。全文検索
       する場合はこのリストの中からトークナイザーを選んでください。

       次の場合は default_tokenizer を指定する必要はありません。

          · テーブルを語彙表として使わないとき。

          · テーブルを語彙表として使うが、全文検索をしないとき。例:

                · インデックス対象のデータが Int32Time のようにテキストデータでないとき。

                · 完全一致検索や前方一致検索などだけが必要なとき。

       TABLE_NO_KEY     フラグと一緒に     default_tokenizer     を使うことはできません。これは、
       TABLE_NO_KEY フラグを使っているテーブルは語彙表として使うことはできないからです。

       テーブルを語彙表として使いたいときは、   flagsTABLE_HASH_KEYTABLE_PAT_KEYTABLE_DAT_KEY のどれかを指定してください。

       デフォルト値はありません。

   normalizer
       キーを正規化するために使うノーマライザーを指定します。

       TABLE_NO_KEY はキーをサポートしていないので、 TABLE_NO_KEYnormalizer  を一緒に指定する
       ことはできません。

       ノーマライザーの一覧は /reference/normalizers にあります。

       デフォルト値はありません。

   token_filters
       トークナイズされたトークンに所定の処理を行うために使うトークンフィルターを指定します。

       TABLE_NO_KEY はキーをサポートしていないので、 TABLE_NO_KEYtoken_filters を一緒に指定す
       ることはできません。

       トークンフィルターの一覧は /reference/token_filters にあります。

       デフォルト値はありません。

   戻り値
       table_create が成功したときは以下のようにボディは true になります:

          [HEADER, true]

       table_create が失敗すると、エラーの詳細は HEADER に含まれます。

       HEADER については /reference/command/output_format を参照してください。

   参考
       · /reference/tables

       · /reference/commands/column_create

       · /reference/tokenizers

       · /reference/normalizers

       · /reference/command/output_format

   table_list
   概要
       table_list - DBに定義されているテーブルをリスト表示

       Groonga組込コマンドの一つであるtable_listについて説明します。組込コマンドは、groonga実行
       ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することに
       よって実行します。

       table_listは、DBに定義されているテーブルのリストを表示します。

   構文
          table_list

   使い方
       実行例:

          table_list
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         "id",
          #         "UInt32"
          #       ],
          #       [
          #         "name",
          #         "ShortText"
          #       ],
          #       [
          #         "path",
          #         "ShortText"
          #       ],
          #       [
          #         "flags",
          #         "ShortText"
          #       ],
          #       [
          #         "domain",
          #         "ShortText"
          #       ],
          #       [
          #         "range",
          #         "ShortText"
          #       ],
          #       [
          #         "default_tokenizer",
          #         "ShortText"
          #       ],
          #       [
          #         "normalizer",
          #         "ShortText"
          #       ]
          #     ],
          #     [
          #       259,
          #       "Ages",
          #       "/tmp/groonga-databases/commands_table_create.0000103",
          #       "TABLE_DAT_KEY|PERSISTENT",
          #       "UInt32",
          #       null,
          #       null,
          #       null
          #     ],
          #     [
          #       257,
          #       "Lexicon",
          #       "/tmp/groonga-databases/commands_table_create.0000101",
          #       "TABLE_PAT_KEY|PERSISTENT",
          #       "ShortText",
          #       null,
          #       "TokenBigram",
          #       "NormalizerAuto"
          #     ],
          #     [
          #       256,
          #       "Logs",
          #       "/tmp/groonga-databases/commands_table_create.0000100",
          #       "TABLE_NO_KEY|PERSISTENT",
          #       null,
          #       null,
          #       null,
          #       null
          #     ],
          #     [
          #       258,
          #       "Tags",
          #       "/tmp/groonga-databases/commands_table_create.0000102",
          #       "TABLE_HASH_KEY|PERSISTENT",
          #       "ShortText",
          #       null,
          #       null,
          #       null
          #     ]
          #   ]
          # ]

   引数
       ありません。

   戻り値
       テーブル名一覧が以下の形式で返却されます。:

          [[[テーブル情報名1,テーブル情報型1],...], テーブル情報1,...]

       テーブル情報名n
          テーブル情報n  には複数の情報が含まれますが、そこに入る情報がどんな内容かを示す名前を出
          力します。 情報名は以下の通りです。

          id
              テーブルオブジェクトに割り当てられたID

          name
              テーブル名

          path
              テーブルのレコードを格納するファイル名

          flags
              テーブルのflags属性

          domain
              主キー値の属する型

          range
              valueが属する型

       テーブル情報型n
          テーブル情報の型を出力します。

       テーブル情報n
          テーブル情報名n  で示された情報の配列を出力します。 情報の順序は テーブル情報名n の順序
          と同じです。

   table_remove
   概要
       table_remove  はテーブルとそのカラムを削除します。もし、テーブルのキーあるいはそのテーブル
       のカラムにインデックスが張ってある場合はそれらも削除されます。

       バージョン  6.0.1 で追加: もし、自分がなにをしようとしているかちゃんと理解しているのであれ
       ば、 --dependent yes パラメーターを使うことで1回の table_remove で対象テーブルを参照してい
       るテーブルとカラムも削除することができます。

   構文
       このコマンドには2つの引数があります。:

          table_remove name
                       [dependent=no]

   使い方
       削除したいテーブルの名前を指定するだけです。 table_remove は指定されたテーブルとそのテーブ
       ルのカラムを削除します。もし、テーブルとそのテーブルのカラムにインデックスが張ってある場合
       は、張ってあるすべてのインデックスも削除します。

       このセクションでは次のことについて説明します。

          · 基本的な使い方

          · 削除できないケース

          · 対象テーブルを参照しているテーブル・カラムも一緒に削除

          · 利用リソースの削減

   基本的な使い方
       次のケースを考えてみましょう。

          · Entries というテーブルがあります。

          · Entries テーブルにはいくつかカラムがあります。

          · Entries テーブルのキーにはインデックスが張ってあります。

          · Entries のあるカラムにはインデックスが張ってあります。

       以下は Entries テーブルを作成するコマンドです。

       実行例:

          table_create Entries TABLE_HASH_KEY UInt32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entries title COLUMN_SCALAR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Entries content COLUMN_SCALAR Text
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       以下は Entries テーブルのキーにインデックスを張るコマンドです。

       実行例:

          table_create EntryKeys TABLE_HASH_KEY UInt32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create EntryKeys key_index COLUMN_INDEX Entries _key
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       以下は Entries テーブルのカラムにインデックスを張るコマンドです。

       実行例:

          table_create Terms TABLE_PAT_KEY ShortText \
            --default_tokenizer TokenBigram \
            --normalizer NormalizerAuto
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Terms content_index COLUMN_INDEX Entries content
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       table_remove を実行する前に現在のスキーマを確認しましょう。

       実行例:

          dump
          # table_create Entries TABLE_HASH_KEY UInt32
          # column_create Entries content COLUMN_SCALAR Text
          # column_create Entries title COLUMN_SCALAR ShortText
          #
          # table_create EntryKeys TABLE_HASH_KEY UInt32
          #
          # table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
          #
          # column_create EntryKeys key_index COLUMN_INDEX Entries _key
          # column_create Terms content_index COLUMN_INDEX Entries content

       Entries テーブルを削除すると、次のテーブルとカラムが削除されます。

          · Entries

          · Entries.title

          · Entries.context

          · EntryKeys.key_index

          · Terms.content_index

       次のテーブル(語彙表)は削除されません。

          · EntryKeys

          · Terms

       table_remove を実行しましょう。

       実行例:

          table_remove Entries
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       以下が table_remove 実行後のスキーマです。 EntryKeysTerms だけが残っています。

       実行例:

          dump
          # table_create EntryKeys TABLE_HASH_KEY UInt32
          #
          # table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto

   削除できないケース
       以下は削除できないケースです。

          · 1つ以上のテーブルがこの削除対象のテーブルをキーの型として使っている。

          · 1つ以上のカラムがこの削除対象のテーブルを値の型として使っている。

       どちらのケースも参照先がなくなることを防ぎます。もし、削除対象のテーブルが型として参照され
       ているままそのテーブルが削除されてしまうと、そのテーブルを参照しているテーブルとカラムは壊
       れてしまいます。

       もし、削除対象のテーブルがどれかの条件を満たしたら  table_remove  は失敗します。削除対象の
       テーブルも削除対象のテーブルのカラムも削除されません。

       以下は削除対象のテーブルがキーの型に使われるケースの例です。

       次のコマンドは削除対象のテーブルとそのテーブルをキーの型として使うテーブルを作成します。

       実行例:

          table_create ReferencedByTable TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create ReferenceTable TABLE_HASH_KEY ReferencedByTable
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       ReferencedByTable に対する table_remove は失敗します。

       実行例:

          table_remove ReferencedByTable
          # [
          #   [
          #     -2,
          #     1337566253.89858,
          #     0.000355720520019531,
          #     "[table][remove] a table that references the table exists: <ReferenceTable._key> -> <ReferencedByTable>",
          #     [
          #       [
          #         "is_removable_table",
          #         "db.c",
          #         8831
          #       ]
          #     ]
          #   ],
          #   false
          # ]

       ReferencedByTable を削除する前に ReferenceTable を削除する必要があります。

       実行例:

          table_remove ReferenceTable
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_remove ReferencedByTable
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       以下は削除対象のテーブルが値の型に使われるケースの例です。

       次のコマンドは削除対象のテーブルとそのテーブルを値の型として使うカラムを作成します。

       実行例:

          table_create ReferencedByColumn TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Table TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Table reference_column COLUMN_SCALAR ReferencedByColumn
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       ReferencedByColumn に対する table_remove は失敗します。

       実行例:

          table_remove ReferencedByColumn
          # [
          #   [
          #     -2,
          #     1337566253.89858,
          #     0.000355720520019531,
          #     "[table][remove] a column that references the table exists: <Table.reference_column> -> <ReferencedByColumn>",
          #     [
          #       [
          #         "is_removable_table",
          #         "db.c",
          #         8851
          #       ]
          #     ]
          #   ],
          #   false
          # ]

       ReferencedByColumn を削除する前に Table.reference_column を削除する必要があります。

       実行例:

          column_remove Table reference_column
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_remove ReferencedByColumn
          # [[0, 1337566253.89858, 0.000355720520019531], true]

   対象テーブルを参照しているテーブル・カラムも一緒に削除
       バージョン 6.0.1 で追加.

       もし、自分がなにをしようとしているかちゃんと理解しているのであれば、 --dependent yes  パラ
       メーターを使うことで1回の  table_remove で対象テーブルを参照しているテーブルとカラムも削除
       することができます。

       以下のスキーマの ReferencedTable は1つのテーブルと1つのカラムから参照されています。

       実行例:

          table_create ReferencedTable TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Table1 TABLE_HASH_KEY ReferencedTable
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_create Table2 TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Table2 reference_column COLUMN_SCALAR ReferencedTable
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       デフォルトでは ReferencedTable を削除することはできません。

       実行例:

          table_remove ReferencedTable
          # [
          #   [
          #     -2,
          #     1337566253.89858,
          #     0.000355720520019531,
          #     "[table][remove] a table that references the table exists: <Table1._key> -> <ReferencedTable>",
          #     [
          #       [
          #         "is_removable_table",
          #         "db.c",
          #         8831
          #       ]
          #     ]
          #   ],
          #   false
          # ]

       --dependent    yes    パラメーターを使うことで    ReferencedTableTable1Table2.reference_column    を削除できます。    Table1Table2.reference_columnReferencedTable を参照しています。

       実行例:

          table_remove ReferencedTable --dependent yes
          # [[0, 1337566253.89858, 0.000355720520019531], true]

   利用リソースの削減
       table_remove削除できないケース  のチェックをするためにデータベース内のすべてのテーブル
       とカラムを開きます。

       もし、大量のテーブルとカラムがある場合、 table_remove はたくさんのリソースを使うかもしれま
       せん。このケース用の回避策があります。

       table_remove は最大スレッド数が 1 のときはチェック用に一時的に開いたテーブルとカラムを閉じ
       ます。

       thread_limit を使うと現在の最大スレッド数を確認・変更できます。

       この機能は次のケースでは使われます。

       実行例:

          table_create Entries TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          thread_limit 2
          # [[0, 1337566253.89858, 0.000355720520019531], 1]
          table_remove Entries
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       この機能は次のケースでは使われません。

       実行例:

          table_create Entries TABLE_NO_KEY
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          thread_limit 2
          # [[0, 1337566253.89858, 0.000355720520019531], 1]
          table_remove Entries
          # [[0, 1337566253.89858, 0.000355720520019531], true]

   引数
       このセクションではすべての引数について説明します。

   必須引数
       必須の引数は1つです。

   name
       削除するテーブルの名前を指定します。

       このパラメーターの使い方は 使い方 を参照してください。

   省略可能引数
       省略可能な引数が1つあります。

   dependent
       バージョン 6.0.1 で追加.

       対象テーブルを参照しているテーブル・カラムも一緒に削除するかどうかを指定します。

       yes を指定した場合は、対象テーブルを参照しているテーブル・カラムも一緒に削除します。それ以
       外の場合は、どれも削除せずにエラーが返ります。

       言い換えると、デフォルトでは、対象テーブルを参照しているテーブル・カラムが1つでもある
       と、対象テーブルを削除しません。

       このパラメーターは注意して使ってください。危険なパラメーターです。

       このパラメーターの使い方は 対象テーブルを参照しているテーブル・カラムも一緒に削除 を参照し
       てください。

   戻り値
       このコマンドが成功したときは以下のようにボディは true になります:

          [HEADER, true]

       このコマンドが失敗すると、 HEADER にエラーの詳細が含まれます。

       HEADER については /reference/command/output_format を参照してください。

   table_rename
   概要
       table_rename コマンドはテーブル名を変更します。

       これは軽い操作です。名前とテーブルオブジェクト間の関係を変更するだけです。テーブルの値と
       テーブルのカラムの値をコピーしません。

       これは危険な操作です。 table_rename を実行している間、読み取り操作を含むすべての操作を停止
       しなければいけません。以下のケースが起こった場合、Groongaプロセスはクラッシュするかもしれ
       ません。

          · 現在のテーブル名で名前を変更しようとしているテーブルにアクセスする操作(たとえば
            select )を開始します。以降、現在のテーブル名を 古いテーブル名 と呼ぶことにします。こ
            れは、今、このテーブル名を変更しようとしているからです。

          · table_rename を実行します。 select は実行中です。

          · select は古いテーブル名で、名前が変更されたテーブルにアクセスします。しかし、テーブル
            はすでに新しいテーブル名に変更されているため、 select  は古いテーブル名でテーブルを見
            つけることができません。このときGroongaプロセスがクラッシュするかもしれません。

   構文
       このコマンドには2つの引数があります。

       すべての引数は必須です:

          table_rename name new_name

   使い方
       以下は table_rename コマンドの簡単な使用例です。

       実行例:

          table_create Users TABLE_PAT_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Users score COLUMN_SCALAR Int32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Users
          [
          {"_key": "Alice",  "score": 2},
          {"_key": "Bob",    "score": 0},
          {"_key": "Carlos", "score": -1}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]
          table_rename Users Players
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          table_list
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         "id",
          #         "UInt32"
          #       ],
          #       [
          #         "name",
          #         "ShortText"
          #       ],
          #       [
          #         "path",
          #         "ShortText"
          #       ],
          #       [
          #         "flags",
          #         "ShortText"
          #       ],
          #       [
          #         "domain",
          #         "ShortText"
          #       ],
          #       [
          #         "range",
          #         "ShortText"
          #       ],
          #       [
          #         "default_tokenizer",
          #         "ShortText"
          #       ],
          #       [
          #         "normalizer",
          #         "ShortText"
          #       ]
          #     ],
          #     [
          #       256,
          #       "Players",
          #       "/tmp/groonga-databases/commands_table_rename.0000100",
          #       "TABLE_PAT_KEY|PERSISTENT",
          #       "ShortText",
          #       null,
          #       null,
          #       null
          #     ]
          #   ]
          # ]
          select Players
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         1,
          #         "Alice",
          #         2
          #       ],
          #       [
          #         2,
          #         "Bob",
          #         0
          #       ],
          #       [
          #         3,
          #         "Carlos",
          #         -1
          #       ]
          #     ]
          #   ]
          # ]

   引数
       このセクションでは table_rename の引数について説明します。

   必須引数
       すべての引数は必須です。

   name
       名前を変更するテーブルの名前を指定します。

   new_name
       新しいテーブル名を指定します。

   戻り値
       このコマンドが成功したときは以下のようにボディは true になります:

          [HEADER, true]

       このコマンドが失敗すると、 HEADER にエラーの詳細が含まれます。

       HEADER については /reference/command/output_format を参照してください。

   table_tokenize
   概要
       table_tokenize コマンドは指定したテーブルのトークナイザーでテキストをトークナイズします。

   構文
       このコマンドにはたくさんの引数があります。

       tablestring は必須の引数です。残りは省略できます:

          table_tokenize table
                         string
                         [flags=NONE]
                         [mode=GET]

   使い方
       以下は簡単な使用例です。

       実行例:

          register token_filters/stop_word
          # [[0,0.0,0.0],true]
          table_create Terms TABLE_PAT_KEY ShortText \
            --default_tokenizer TokenBigram \
            --normalizer NormalizerAuto \
            --token_filters TokenFilterStopWord
          # [[0,0.0,0.0],true]
          column_create Terms is_stop_word COLUMN_SCALAR Bool
          # [[0,0.0,0.0],true]
          load --table Terms
          [
          {"_key": "and", "is_stop_word": true}
          ]
          # [[0,0.0,0.0],1]
          table_tokenize Terms "Hello and Good-bye" --mode GET
          # [
          #  [
          #    0,
          #    0.0,
          #    0.0
          #  ],
          #  [
          #    {
          #      "value": "hello",
          #      "position": 0
          #    },
          #    {
          #      "value": "good",
          #      "position": 2
          #    },
          #    {
          #      "value": "-",
          #      "position": 3
          #    },
          #    {
          #      "value": "bye",
          #      "position": 4
          #    }
          #  ]
          # ]

       Terms  テーブルには、  TokenBigram  トークナイザーと、  NormalizerAuto  ノーマライザーと、
       TokenFilterStopWord トークンフィルターがセットされています。 この例は TokenBigram トークナ
       イザーで    "Hello    and   Good-bye"   をトークナイズしたトークンを返します。トークンは、
       NormalizerAuto ノーマライザーで正規化されています。 and  トークンは、  TokenFilterStopWord
       トークンフィルターで除去されています。

   引数
       このセクションではすべての引数について説明します。引数はカテゴリわけしています。

   必須引数
       必須の引数は2つです。 tablestring です。

   table
       語彙表テーブルを指定します。 table_tokenize コマンドは、語彙表テーブルにセットされたトーク
       ナイザーとノーマライザーとトークンフィルターを使います。

   string
       トークナイズしたい文字列を指定します。

       詳細は、 /reference/commands/tokenize の tokenize-string オプションを参照してください。

   省略可能引数
       いくつか省略可能な引数があります。

   flags
       トークナイズ処理をカスタマイズするオプションを指定します。「 |  」で区切って複数のオプショ
       ンを指定することができます。

       デフォルト値は NONE です。

       詳細は、 /reference/commands/tokenize の tokenize-flags オプションを参照してください。

   mode
       トークナイズモードを指定します。

       デフォルト値は GET です。

       詳細は、 /reference/commands/tokenize の tokenize-mode オプションを参照してください。

   戻り値
       table_tokenize コマンドはトークナイズしたトークンを返します。

       詳細は、  /reference/commands/tokenize の tokenize-return-value オプションを参照してくださ
       い。

   参考
       · /reference/tokenizers

       · /reference/commands/tokenize

   thread_limit
   概要
       バージョン 5.0.7 で追加.

       thread_limit は次の2つの機能を提供します。

          · 最大スレッド数を返します。

          · 最大スレッド数を設定します。

       /reference/executables/groongathread_limit  のすべての機能を提供する唯一のGroongaサー
       バーです。

       /reference/executables/groonga-httpd  は最大スレッド数を返す機能だけをサポートしています。
       /reference/executables/groonga-httpd               の最大スレッド数は常に1です。なぜなら、
       /reference/executables/groonga-httpd はシングルスレッドモデルを採用しているからです。

       Groongaをライブラリーとして使っている場合、       grn_thread_set_get_limit_func()grn_thread_set_set_limit_func()                 でカスタム関数を設定しない限り動きません。
       grn_thread_set_get_limit_func() でカスタム関数を設定すると最大スレッド数を返す機能が動きま
       す。 grn_thread_set_set_limit_func()  でカスタム関数を設定すると最大スレッド数を設定する機
       能が動きます。

   構文
       このコマンドの引数は1つで省略できます:

          thread_limit [max=null]

   使い方
       引数なしで呼び出すと最大スレッド数を得られます。

       実行例:

          thread_limit
          # [[0, 1337566253.89858, 0.000355720520019531], 2]

       0 が返ってきたら、そのGroongaサーバーはこの機能をサポートしていないということです。

       max 引数つきで呼び出すと最大スレッド数を設定できます。

       実行例:

          thread_limit --max 4
          # [[0, 1337566253.89858, 0.000355720520019531], 2]

       max 引数を渡したときは設定前の最大スレッド数が返ります。

   引数
       このセクションではすべての引数について説明します。

   必須引数
       必須の引数はありません。

   省略可能引数
       省略可能な引数が1つあります。

   max
       新しい最大スレッド数を指定します。

       正の整数を指定してください。

       実行例:

          thread_limit --max 3
          # [[0, 1337566253.89858, 0.000355720520019531], 4]

       max 引数を指定した場合、 thread_limitmax を適用する前の最大スレッド数を返します。

   戻り値
       このコマンドのボディは最大スレッド数になります:

          [HEADER, N_MAX_THREADS]

       max を指定したときは N_MAX_THREADSmax を適用する前の最大スレッド数になります。

       HEADER については /reference/command/output_format を参照してください。

   tokenize
   概要
       tokenize  コマンドは指定したトークナイザーでテキストをトークナイズします。これはトークナイ
       ズ処理のデバッグに便利です。

   構文
       このコマンドにはたくさんの引数があります。

       tokenizerstring が必須の引数で、他の引数はすべて省略できます:

          tokenize tokenizer
                   string
                   [normalizer=null]
                   [flags=NONE]
                   [mode=ADD]
                   [token_filters=NONE]

   使い方
       以下は簡単な使用例です。

       実行例:

          tokenize TokenBigram "Fulltext Search"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     {
          #       "position": 0,
          #       "force_prefix": false,
          #       "value": "Fu"
          #     },
          #     {
          #       "position": 1,
          #       "force_prefix": false,
          #       "value": "ul"
          #     },
          #     {
          #       "position": 2,
          #       "force_prefix": false,
          #       "value": "ll"
          #     },
          #     {
          #       "position": 3,
          #       "force_prefix": false,
          #       "value": "lt"
          #     },
          #     {
          #       "position": 4,
          #       "force_prefix": false,
          #       "value": "te"
          #     },
          #     {
          #       "position": 5,
          #       "force_prefix": false,
          #       "value": "ex"
          #     },
          #     {
          #       "position": 6,
          #       "force_prefix": false,
          #       "value": "xt"
          #     },
          #     {
          #       "position": 7,
          #       "force_prefix": false,
          #       "value": "t "
          #     },
          #     {
          #       "position": 8,
          #       "force_prefix": false,
          #       "value": " S"
          #     },
          #     {
          #       "position": 9,
          #       "force_prefix": false,
          #       "value": "Se"
          #     },
          #     {
          #       "position": 10,
          #       "force_prefix": false,
          #       "value": "ea"
          #     },
          #     {
          #       "position": 11,
          #       "force_prefix": false,
          #       "value": "ar"
          #     },
          #     {
          #       "position": 12,
          #       "force_prefix": false,
          #       "value": "rc"
          #     },
          #     {
          #       "position": 13,
          #       "force_prefix": false,
          #       "value": "ch"
          #     },
          #     {
          #       "position": 14,
          #       "force_prefix": false,
          #       "value": "h"
          #     }
          #   ]
          # ]

       この例では必須のパラメーターだけ使っています。 tokenizer には TokenBigram を、 string には
       "Fulltext   Search"   を指定しています。この例は  TokenBigram  トークナイザーで  "Fulltext
       Search" をトークナイズしたトークンを返します。この例では "Fulltext Search"  を正規化してい
       ません。

   引数
       このセクションではすべての引数について説明します。引数はカテゴリわけしています。

   必須引数
       必須引数は二つあります。 tokenizerstring です。

   tokenizer
       トークナイザー名を指定します。  tokenize コマンドは tokenizer で指定された名前のトークナイ
       ザーを使います。

       組み込みのトークナイザーについては /reference/tokenizers を参照してください。

       以下は組み込みの TokenTrigram トークナイザーを使う例です。

       実行例:

          tokenize TokenTrigram "Fulltext Search"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     {
          #       "position": 0,
          #       "force_prefix": false,
          #       "value": "Ful"
          #     },
          #     {
          #       "position": 1,
          #       "force_prefix": false,
          #       "value": "ull"
          #     },
          #     {
          #       "position": 2,
          #       "force_prefix": false,
          #       "value": "llt"
          #     },
          #     {
          #       "position": 3,
          #       "force_prefix": false,
          #       "value": "lte"
          #     },
          #     {
          #       "position": 4,
          #       "force_prefix": false,
          #       "value": "tex"
          #     },
          #     {
          #       "position": 5,
          #       "force_prefix": false,
          #       "value": "ext"
          #     },
          #     {
          #       "position": 6,
          #       "force_prefix": false,
          #       "value": "xt "
          #     },
          #     {
          #       "position": 7,
          #       "force_prefix": false,
          #       "value": "t S"
          #     },
          #     {
          #       "position": 8,
          #       "force_prefix": false,
          #       "value": " Se"
          #     },
          #     {
          #       "position": 9,
          #       "force_prefix": false,
          #       "value": "Sea"
          #     },
          #     {
          #       "position": 10,
          #       "force_prefix": false,
          #       "value": "ear"
          #     },
          #     {
          #       "position": 11,
          #       "force_prefix": false,
          #       "value": "arc"
          #     },
          #     {
          #       "position": 12,
          #       "force_prefix": false,
          #       "value": "rch"
          #     },
          #     {
          #       "position": 13,
          #       "force_prefix": false,
          #       "value": "ch"
          #     },
          #     {
          #       "position": 14,
          #       "force_prefix": false,
          #       "value": "h"
          #     }
          #   ]
          # ]

       他のトークナイザーを使いたい場合は、 register コマンドでトークナイザープラグインを登録する
       必要があります。例えば、  KyTea ベースのトークナイザーを tokenizers/kytea を登録することで
       使えます。

   string
       トークナイズしたい文字列を指定します。

       string の中に文字列を含める場合は、シングルクォート( '  )またはダブルクォート(  "  )で
       string をクォートする必要があります。

       string の中で空白を使う例です。

       実行例:

          tokenize TokenBigram "Groonga is a fast fulltext earch engine!"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     {
          #       "position": 0,
          #       "force_prefix": false,
          #       "value": "Gr"
          #     },
          #     {
          #       "position": 1,
          #       "force_prefix": false,
          #       "value": "ro"
          #     },
          #     {
          #       "position": 2,
          #       "force_prefix": false,
          #       "value": "oo"
          #     },
          #     {
          #       "position": 3,
          #       "force_prefix": false,
          #       "value": "on"
          #     },
          #     {
          #       "position": 4,
          #       "force_prefix": false,
          #       "value": "ng"
          #     },
          #     {
          #       "position": 5,
          #       "force_prefix": false,
          #       "value": "ga"
          #     },
          #     {
          #       "position": 6,
          #       "force_prefix": false,
          #       "value": "a "
          #     },
          #     {
          #       "position": 7,
          #       "force_prefix": false,
          #       "value": " i"
          #     },
          #     {
          #       "position": 8,
          #       "force_prefix": false,
          #       "value": "is"
          #     },
          #     {
          #       "position": 9,
          #       "force_prefix": false,
          #       "value": "s "
          #     },
          #     {
          #       "position": 10,
          #       "force_prefix": false,
          #       "value": " a"
          #     },
          #     {
          #       "position": 11,
          #       "force_prefix": false,
          #       "value": "a "
          #     },
          #     {
          #       "position": 12,
          #       "force_prefix": false,
          #       "value": " f"
          #     },
          #     {
          #       "position": 13,
          #       "force_prefix": false,
          #       "value": "fa"
          #     },
          #     {
          #       "position": 14,
          #       "force_prefix": false,
          #       "value": "as"
          #     },
          #     {
          #       "position": 15,
          #       "force_prefix": false,
          #       "value": "st"
          #     },
          #     {
          #       "position": 16,
          #       "force_prefix": false,
          #       "value": "t "
          #     },
          #     {
          #       "position": 17,
          #       "force_prefix": false,
          #       "value": " f"
          #     },
          #     {
          #       "position": 18,
          #       "force_prefix": false,
          #       "value": "fu"
          #     },
          #     {
          #       "position": 19,
          #       "force_prefix": false,
          #       "value": "ul"
          #     },
          #     {
          #       "position": 20,
          #       "force_prefix": false,
          #       "value": "ll"
          #     },
          #     {
          #       "position": 21,
          #       "force_prefix": false,
          #       "value": "lt"
          #     },
          #     {
          #       "position": 22,
          #       "force_prefix": false,
          #       "value": "te"
          #     },
          #     {
          #       "position": 23,
          #       "force_prefix": false,
          #       "value": "ex"
          #     },
          #     {
          #       "position": 24,
          #       "force_prefix": false,
          #       "value": "xt"
          #     },
          #     {
          #       "position": 25,
          #       "force_prefix": false,
          #       "value": "t "
          #     },
          #     {
          #       "position": 26,
          #       "force_prefix": false,
          #       "value": " e"
          #     },
          #     {
          #       "position": 27,
          #       "force_prefix": false,
          #       "value": "ea"
          #     },
          #     {
          #       "position": 28,
          #       "force_prefix": false,
          #       "value": "ar"
          #     },
          #     {
          #       "position": 29,
          #       "force_prefix": false,
          #       "value": "rc"
          #     },
          #     {
          #       "position": 30,
          #       "force_prefix": false,
          #       "value": "ch"
          #     },
          #     {
          #       "position": 31,
          #       "force_prefix": false,
          #       "value": "h "
          #     },
          #     {
          #       "position": 32,
          #       "force_prefix": false,
          #       "value": " e"
          #     },
          #     {
          #       "position": 33,
          #       "force_prefix": false,
          #       "value": "en"
          #     },
          #     {
          #       "position": 34,
          #       "force_prefix": false,
          #       "value": "ng"
          #     },
          #     {
          #       "position": 35,
          #       "force_prefix": false,
          #       "value": "gi"
          #     },
          #     {
          #       "position": 36,
          #       "force_prefix": false,
          #       "value": "in"
          #     },
          #     {
          #       "position": 37,
          #       "force_prefix": false,
          #       "value": "ne"
          #     },
          #     {
          #       "position": 38,
          #       "force_prefix": false,
          #       "value": "e!"
          #     },
          #     {
          #       "position": 39,
          #       "force_prefix": false,
          #       "value": "!"
          #     }
          #   ]
          # ]

   省略可能引数
       いくつか省略可能な引数があります。

   normalizer
       ノーマライザー名を指定します。 tokenize コマンドは normalizer という名前のノーマライザーを
       使います。ノーマライザーは TokenBigrma  など、N-gram関連のトークナイザーにとってとても重要
       です。

       ノーマライザーはノーマライズ中にそれぞれの文字の種類を検出します。N-gram系のトークナイザー
       はトークナイズ中に文字の種類を利用します。

       以下はノーマライザーを使わない例です。

       実行例:

          tokenize TokenBigram "Fulltext Search"
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     {
          #       "position": 0,
          #       "force_prefix": false,
          #       "value": "Fu"
          #     },
          #     {
          #       "position": 1,
          #       "force_prefix": false,
          #       "value": "ul"
          #     },
          #     {
          #       "position": 2,
          #       "force_prefix": false,
          #       "value": "ll"
          #     },
          #     {
          #       "position": 3,
          #       "force_prefix": false,
          #       "value": "lt"
          #     },
          #     {
          #       "position": 4,
          #       "force_prefix": false,
          #       "value": "te"
          #     },
          #     {
          #       "position": 5,
          #       "force_prefix": false,
          #       "value": "ex"
          #     },
          #     {
          #       "position": 6,
          #       "force_prefix": false,
          #       "value": "xt"
          #     },
          #     {
          #       "position": 7,
          #       "force_prefix": false,
          #       "value": "t "
          #     },
          #     {
          #       "position": 8,
          #       "force_prefix": false,
          #       "value": " S"
          #     },
          #     {
          #       "position": 9,
          #       "force_prefix": false,
          #       "value": "Se"
          #     },
          #     {
          #       "position": 10,
          #       "force_prefix": false,
          #       "value": "ea"
          #     },
          #     {
          #       "position": 11,
          #       "force_prefix": false,
          #       "value": "ar"
          #     },
          #     {
          #       "position": 12,
          #       "force_prefix": false,
          #       "value": "rc"
          #     },
          #     {
          #       "position": 13,
          #       "force_prefix": false,
          #       "value": "ch"
          #     },
          #     {
          #       "position": 14,
          #       "force_prefix": false,
          #       "value": "h"
          #     }
          #   ]
          # ]

       すべてのアルファベットが2文字ごとトークナイズされています。例えば、  Fu  で1つのトークンに
       なっています。

       以下はノーマライザーを使う例です。

       実行例:

          tokenize TokenBigram "Fulltext Search" NormalizerAuto
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     {
          #       "position": 0,
          #       "force_prefix": false,
          #       "value": "fulltext"
          #     },
          #     {
          #       "position": 1,
          #       "force_prefix": false,
          #       "value": "search"
          #     }
          #   ]
          # ]

       連続するアルファベットが1つのトークンにトークナイズされています。例えば、 fulltext で1つの
       トークンになっています。

       ノーマライザーを使いながら2文字でトークナイズしたい場合は  TokenBigramSplitSymbolAlpha  を
       使って下さい。

       実行例:

          tokenize TokenBigramSplitSymbolAlpha "Fulltext Search" NormalizerAuto
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     {
          #       "position": 0,
          #       "force_prefix": false,
          #       "value": "fu"
          #     },
          #     {
          #       "position": 1,
          #       "force_prefix": false,
          #       "value": "ul"
          #     },
          #     {
          #       "position": 2,
          #       "force_prefix": false,
          #       "value": "ll"
          #     },
          #     {
          #       "position": 3,
          #       "force_prefix": false,
          #       "value": "lt"
          #     },
          #     {
          #       "position": 4,
          #       "force_prefix": false,
          #       "value": "te"
          #     },
          #     {
          #       "position": 5,
          #       "force_prefix": false,
          #       "value": "ex"
          #     },
          #     {
          #       "position": 6,
          #       "force_prefix": false,
          #       "value": "xt"
          #     },
          #     {
          #       "position": 7,
          #       "force_prefix": false,
          #       "value": "t"
          #     },
          #     {
          #       "position": 8,
          #       "force_prefix": false,
          #       "value": "se"
          #     },
          #     {
          #       "position": 9,
          #       "force_prefix": false,
          #       "value": "ea"
          #     },
          #     {
          #       "position": 10,
          #       "force_prefix": false,
          #       "value": "ar"
          #     },
          #     {
          #       "position": 11,
          #       "force_prefix": false,
          #       "value": "rc"
          #     },
          #     {
          #       "position": 12,
          #       "force_prefix": false,
          #       "value": "ch"
          #     },
          #     {
          #       "position": 13,
          #       "force_prefix": false,
          #       "value": "h"
          #     }
          #   ]
          # ]

       すべてのアルファベットが2文字ごとにトークナイズされています。そして、すべての文字が小文字
       にノーマライズされています。例えば、 fu で1つのトークンになっています。

   flags
       トークナイズ処理をカスタマイズするオプションを指定します。「 |  」で区切って複数のオプショ
       ンを指定することができます。例えば、  NONE|ENABLE_TOKENIZED_DELIMITER というように指定でき
       ます。

       指定可能なフラグは以下の通りです。

                    ┌───────────────────────────┬──────────────────────────────────┐
                    │フラグ                     │ 説明                             │
                    ├───────────────────────────┼──────────────────────────────────┤
                    │NONE                       │ 無視されます。                   │
                    ├───────────────────────────┼──────────────────────────────────┤
                    │ENABLE_TOKENIZED_DELIMITER │ トークナイズ済み区切り文字を有効 │
                    │                           │ にします。トークナイズ済み区切り │
                    │                           │ 文字の詳細は                     │
                    │                           │ /reference/tokenizers を参照して │
                    │                           │ ください。                       │
                    └───────────────────────────┴──────────────────────────────────┘

       以下は ENABLE_TOKENIZED_DELIMITER を使った例です。

       実行例:

          tokenize TokenDelimit "Full￾text Sea￾crch" NormalizerAuto ENABLE_TOKENIZED_DELIMITER
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     {
          #       "position": 0,
          #       "force_prefix": false,
          #       "value": "full"
          #     },
          #     {
          #       "position": 1,
          #       "force_prefix": false,
          #       "value": "text sea"
          #     },
          #     {
          #       "position": 2,
          #       "force_prefix": false,
          #       "value": "crch"
          #     }
          #   ]
          # ]

       TokenDelimit    トークナイザーはトークナイズ済み区切り文字をサポートしているトークナイザー
       の1つです。  ENABLE_TOKENIZED_DELIMITER でトークナイズ済み区切り文字を有効に出来ます。トー
       クナイズ済み区切り文字はトークンの区切りを表す特別な文字です。この文字は U+FFFE です。この
       文字コードはどの文字にも割り当てられていません。つまり、通常の文字列にはこの文字は現れませ
       ん。よって、トークンの区切りを表すという目的には適切な文字です。
       ENABLE_TOKENIZED_DELIMITER  が有効のときは、対象文字列はすでにトークナイズ済みであると扱わ
       れます。トークナイザーは単にトークナイズ済み区切り文字で区切ってトークナイズします。

   mode
       トークナイズモードを指定します。 ADD  を指定すると、ドキュメント追加時と同じルールでトーク
       ナイズされます。    GET   を指定すると、ドキュメント検索時と同じルールでトークナイズされま
       す。省略された場合、 ADD モードでトークナイズされます。

       デフォルトのモードは ADD です。

       以下は ADD モードの例です。

       実行例:

          tokenize TokenBigram "Fulltext Search" --mode ADD
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     {
          #       "position": 0,
          #       "force_prefix": false,
          #       "value": "Fu"
          #     },
          #     {
          #       "position": 1,
          #       "force_prefix": false,
          #       "value": "ul"
          #     },
          #     {
          #       "position": 2,
          #       "force_prefix": false,
          #       "value": "ll"
          #     },
          #     {
          #       "position": 3,
          #       "force_prefix": false,
          #       "value": "lt"
          #     },
          #     {
          #       "position": 4,
          #       "force_prefix": false,
          #       "value": "te"
          #     },
          #     {
          #       "position": 5,
          #       "force_prefix": false,
          #       "value": "ex"
          #     },
          #     {
          #       "position": 6,
          #       "force_prefix": false,
          #       "value": "xt"
          #     },
          #     {
          #       "position": 7,
          #       "force_prefix": false,
          #       "value": "t "
          #     },
          #     {
          #       "position": 8,
          #       "force_prefix": false,
          #       "value": " S"
          #     },
          #     {
          #       "position": 9,
          #       "force_prefix": false,
          #       "value": "Se"
          #     },
          #     {
          #       "position": 10,
          #       "force_prefix": false,
          #       "value": "ea"
          #     },
          #     {
          #       "position": 11,
          #       "force_prefix": false,
          #       "value": "ar"
          #     },
          #     {
          #       "position": 12,
          #       "force_prefix": false,
          #       "value": "rc"
          #     },
          #     {
          #       "position": 13,
          #       "force_prefix": false,
          #       "value": "ch"
          #     },
          #     {
          #       "position": 14,
          #       "force_prefix": false,
          #       "value": "h"
          #     }
          #   ]
          # ]

       最後のアルファベットは1文字でトークナイズされています。

       以下は GET モードの例です。

       実行例:

          tokenize TokenBigram "Fulltext Search" --mode GET
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     {
          #       "position": 0,
          #       "force_prefix": false,
          #       "value": "Fu"
          #     },
          #     {
          #       "position": 1,
          #       "force_prefix": false,
          #       "value": "ul"
          #     },
          #     {
          #       "position": 2,
          #       "force_prefix": false,
          #       "value": "ll"
          #     },
          #     {
          #       "position": 3,
          #       "force_prefix": false,
          #       "value": "lt"
          #     },
          #     {
          #       "position": 4,
          #       "force_prefix": false,
          #       "value": "te"
          #     },
          #     {
          #       "position": 5,
          #       "force_prefix": false,
          #       "value": "ex"
          #     },
          #     {
          #       "position": 6,
          #       "force_prefix": false,
          #       "value": "xt"
          #     },
          #     {
          #       "position": 7,
          #       "force_prefix": false,
          #       "value": "t "
          #     },
          #     {
          #       "position": 8,
          #       "force_prefix": false,
          #       "value": " S"
          #     },
          #     {
          #       "position": 9,
          #       "force_prefix": false,
          #       "value": "Se"
          #     },
          #     {
          #       "position": 10,
          #       "force_prefix": false,
          #       "value": "ea"
          #     },
          #     {
          #       "position": 11,
          #       "force_prefix": false,
          #       "value": "ar"
          #     },
          #     {
          #       "position": 12,
          #       "force_prefix": false,
          #       "value": "rc"
          #     },
          #     {
          #       "position": 13,
          #       "force_prefix": false,
          #       "value": "ch"
          #     }
          #   ]
          # ]

       最後のアルファベットは2文字でトークナイズされています。

   token_filters
       トークンフィルターを指定します。 tokenize  コマンドは  token_filters  という名前のトークン
       フィルターを使います。

       トークンフィルターについては /reference/token_filters を参照してください。

   戻り値
       tokenize  コマンドはトークナイズしたトークンをすべて返します。各トークンはトークン自身の文
       字列情報以外にいくつかの属性を持ちます。属性は今後増えていく可能性があります:

          [HEADER, tokens]

       HEADER
          HEADER については /reference/command/output_format を参照してください。

       tokens
          tokens はトークンの配列です。トークンは以下の属性を持ったオブジェクトです。

                                      ┌─────────┬───────────────────┐
                                      │名前     │ 説明              │
                                      ├─────────┼───────────────────┤
                                      │value    │ トークン自身      │
                                      ├─────────┼───────────────────┤
                                      │position │ N番目のトークン。 │
                                      └─────────┴───────────────────┘

   参考
       · /reference/tokenizers

   tokenizer_list
   概要
       tokenizer_list コマンドはデータベースに登録されているトークナイザーの一覧を返します。

   構文
       このコマンドに引数はありません:

          tokenizer_list

   使い方
       以下は簡単な使用例です。

       実行例:

          tokenizer_list
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     {
          #       "name": "TokenMecab"
          #     },
          #     {
          #       "name": "TokenDelimit"
          #     },
          #     {
          #       "name": "TokenUnigram"
          #     },
          #     {
          #       "name": "TokenBigram"
          #     },
          #     {
          #       "name": "TokenTrigram"
          #     },
          #     {
          #       "name": "TokenBigramSplitSymbol"
          #     },
          #     {
          #       "name": "TokenBigramSplitSymbolAlpha"
          #     },
          #     {
          #       "name": "TokenBigramSplitSymbolAlphaDigit"
          #     },
          #     {
          #       "name": "TokenBigramIgnoreBlank"
          #     },
          #     {
          #       "name": "TokenBigramIgnoreBlankSplitSymbol"
          #     },
          #     {
          #       "name": "TokenBigramIgnoreBlankSplitSymbolAlpha"
          #     },
          #     {
          #       "name": "TokenBigramIgnoreBlankSplitSymbolAlphaDigit"
          #     },
          #     {
          #       "name": "TokenDelimitNull"
          #     },
          #     {
          #       "name": "TokenRegexp"
          #     }
          #   ]
          # ]

       データベースに登録されているトークナイザーの一覧を返します。

   戻り値
       tokenizer_list  コマンドはトークナイザーの一覧を返します。各トークナイザーは属性を持ってい
       ます。例えば名前です。将来、属性は増えるかもしれません。:

          [HEADER, tokenizers]

       HEADER
          HEADER については /reference/command/output_format を参照してください。

       tokenizers
          tokenizers はトークナイザーの配列です。トークナイザーは次の属性を持つオブジェクトです。

                                        ┌─────┬────────────────────┐
                                        │名前 │ 説明               │
                                        └─────┴────────────────────┘

                                        │name │ トークナイザー名。 │
                                        └─────┴────────────────────┘

   参考
       · /reference/tokenizers

       · /reference/commands/tokenize

   truncate
   概要
       truncate  コマンドは指定したテーブルのレコードをすべて削除します。カラムを指定した場合はカ
       ラムの値をすべて削除します。

   構文
       このコマンドの引数は1つで必須です:

          truncate target_name

       バージョン 4.0.9 で追加: target_name parameter can be used since 4.0.9. You  need  to  use
       table parameter for 4.0.8 or earlier.

       For backward compatibility, truncate command accepts table parameter. But it should not be
       used for newly written code.

   使い方
       以下はテーブルに対して truncate コマンドを実行する簡単な使用例です。

       実行例:

          table_create Users TABLE_PAT_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Users score COLUMN_SCALAR Int32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Users
          [
          {"_key": "Alice",  "score": 2},
          {"_key": "Bob",    "score": 0},
          {"_key": "Carlos", "score": -1}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]
          select Users
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         1,
          #         "Alice",
          #         2
          #       ],
          #       [
          #         2,
          #         "Bob",
          #         0
          #       ],
          #       [
          #         3,
          #         "Carlos",
          #         -1
          #       ]
          #     ]
          #   ]
          # ]
          truncate Users
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          select Users
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         0
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "score",
          #           "Int32"
          #         ]
          #       ]
          #     ]
          #   ]
          # ]

       以下はカラムに対して truncate コマンドを実行する簡単な使用例です。

       実行例:

          table_create Users TABLE_PAT_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Users score COLUMN_SCALAR Int32
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          load --table Users
          [
          {"_key": "Alice",  "score": 2},
          {"_key": "Bob",    "score": 0},
          {"_key": "Carlos", "score": -1}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]
          select Users
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         1,
          #         "Alice",
          #         2
          #       ],
          #       [
          #         2,
          #         "Bob",
          #         0
          #       ],
          #       [
          #         3,
          #         "Carlos",
          #         -1
          #       ]
          #     ]
          #   ]
          # ]
          truncate Users.score
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          select Users
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         1,
          #         "Alice",
          #         0
          #       ],
          #       [
          #         2,
          #         "Bob",
          #         0
          #       ],
          #       [
          #         3,
          #         "Carlos",
          #         0
          #       ]
          #     ]
          #   ]
          # ]

   引数
       このセクションでは truncate の引数について説明します。

   必須引数
       target_name だけが必須の引数です。

   target_name
       テーブル名またはカラム名を指定します。

   戻り値
       truncate コマンドは全削除が成功したかどうかを返します。:

          [HEADER, SUCCEEDED_OR_NOT]

       HEADER
          HEADER については /reference/command/output_format を参照してください。

       SUCCEEDED_OR_NOT
          コマンドの実行が成功するとtrueを返します。失敗するとエラーとしてfalseを返します。

   データ型
   名前
       Groonga データ型

   説明
       Groonga は、格納するデータの型を区別します。

       Groongaのデータベースでは、テーブルの主キーや、カラムの値はいずれも何らかの型に属しま
       す。また通常は、一つのテーブルの中の全てのレコードについて、カラムの値は共通となります。

       主キーの型とカラムの型には、Groongaで予め定義済みの型か、ユーザが定義する型、またはユーザ
       が定義したテーブルを指定することができます。

       主キーの型に他のテーブルを指定する場合は、そのテーブルは、主キーの型となるテーブルのサブ
       セットとなります。

       カラムの型に他のテーブルを指定する場合は、そのカラムは、カラムの型となるテーブルの参照キー
       となります。

   組込型
       以下の型が組込型としてあらかじめ定義されています。

   Bool
       ブーリアン型やブール型などと呼ばれる型であり、真偽値を表します。取り得る値はtrueとfalseで
       す。(デフォルト値: false)

       /reference/commands/load  コマンドで値を格納するときは、false、0、空文字列のいずれかを指定
       するとfalseになり、それ以外を指定するとtrueになります。

   Int8
       8bit符号付き整数であり、-128以上127以下の整数を表します。(デフォルト値: 0)

   UInt8
       8bit符号なし整数であり、0以上255以下の整数を表します。(デフォルト値: 0)

   Int16
       16bit符号付き整数であり、-32,768以上32,767以下の整数を表します。(デフォルト値: 0)

   UInt16
       16bit符号なし整数であり、0以上65,535以下の整数を表します。(デフォルト値: 0)

   Int32
       32bit符号付き整数であり、-2,147,483,648以上2,147,483,647以下の整数を表します。(デフォルト
       値: 0)

   UInt32
       32bit符号なし整数であり、0以上4,294,967,295以下の整数を表します。(デフォルト値: 0)

   Int64
       64bit符号付き整数であり、-9,223,372,036,854,775,808以上9,223,372,036,854,775,807以下の整数
       を表します。(デフォルト値: 0)

   UInt64
       64bit符号なし整数であり、0以上18,446,744,073,709,551,615以下の整数を表します。(デフォルト
       値: 0)

   Float
       IEEE 754形式の倍精度浮動小数点数であり、実数を表します。(デフォルト値: 0.0)

       IEEE  754形式の詳細については、  IEEE  754  -  WikipediaIEEE 754: Standard for Binary
       Floating-Point を参照してください。

   Time
       日時を表す型であり、1970年1月1日0時0分0秒からの経過時間を、マイクロ秒単位で64bit符号付き整
       数により表現します。(デフォルト値: 0)

       /reference/commands/load コマンドで値を格納するときは、1970年1月1日0時0分0秒からの経過秒数
       を指定します。秒単位より詳細な日時を指定するには、小数を使います。

   ShortText
       4,095バイト以下の文字列を表します。(デフォルト値: "")

   Text
       65,535バイト以下の文字列を表します。(デフォルト値: "")

   LongText
       2,147,483,647バイト以下の文字列を表します。(デフォルト値: "")

   TokyoGeoPoint
       旧日本測地系による経緯度であり、経度と緯度をミリ秒単位で表現した整数の組により表現しま
       す。(デフォルト値: 0x0)

       度分秒形式でx度y分z秒となる経度・緯度は、(((x  * 60) + y) * 60 + z) * 1000という計算式でミ
       リ秒単位へと変換されます。

       /reference/commands/load コマンドで値を格納するときは、"ミリ秒単位の経度xミリ秒単位の緯度"
       もしくは  "経度の小数表記x緯度の小数表記" という文字列表現を使って指定します。経度と緯度の
       区切りとしては、'x' のほかに ',' を使うことができます。

       測地系の詳細については、 測地系 - Wikipedia を参照してください。

   WGS84GeoPoint
       世界測地系(World Geodetic System, WGS  84)による経緯度であり、経度と緯度をミリ秒単位で表
       現した整数の組により表現します。(デフォルト値: 0x0)

       度分秒形式からミリ秒形式への変換方法や  /reference/commands/load  コマンドにおける指定方法
       はTokyoGeoPointと同じです。

   型に関する制限事項
   テーブルの主キーに指定できない型
       Text型とLongText型については、テーブルの主キーに指定することはできません。

   ベクターとして格納できない型
       Groongaのカラムは、ある型のベクターを保存することができます。しかし、ShortText,      Text,
       LongTextの3つの型についてはベクターとして保存したり出力したりすることはできますが、検索条
       件やドリルダウン条件に指定することができません。

       テーブル型は、ベクターとして格納することができます。よって、ShortTextのベクターを検索条件
       やドリルダウン条件に使用したい場合には、主キーがShortText型のテーブルを別途作成し、その
       テーブルを型として利用します。

   テーブル
   概要
       GroongaのテーブルはIDとキーの対応を管理します。Groongaは4つの種類のテーブルを提供していま
       す。 TABLE_NO_KEYTABLE_HASH_KEYTABLE_PAT_KEYTABLE_DAT_KEY です。

       TABLE_NO_KEY  以外のすべてのテーブルは高速なキー→ID検索とID→キー検索の両方をサポートしてい
       ます。 TABLE_NO_KEY はキーをサポートしていません。 TABLE_NO_KEY はIDだけを管理します。その
       ため、 TABLE_NO_KEY はID検索もキー検索もサポートしていません。

   特徴
       以下はGroongaにあるすべてのテーブルの特性表です。(この表の中では  TABLE_ プレフィックスは
       省略しています。)

          ┌─────────────────┬────────┬──────────────────┬──────────────────┬──────────────────┐
          │                 │ NO_KEYHASH_KEYPAT_KEYDAT_KEY          │
          ├─────────────────┼────────┼──────────────────┼──────────────────┼──────────────────┤
          │データ構造       │ 配列   │ ハッシュテーブル │ パトリシアトライ │ ダブル配列トライ │
          ├─────────────────┼────────┼──────────────────┼──────────────────┼──────────────────┤
          │IDサポート       │ o      │ o                │ o                │ o                │
          ├─────────────────┼────────┼──────────────────┼──────────────────┼──────────────────┤
          │キーサポート     │ x      │ o                │ o                │ o                │
          ├─────────────────┼────────┼──────────────────┼──────────────────┼──────────────────┤
          │バリューサポート │ o      │ o                │ o                │ x                │
          ├─────────────────┼────────┼──────────────────┼──────────────────┼──────────────────┤
          │キー→ID検索速度  │ -      │ oo               │ x                │ o                │
          │                 │        │                  │                  │                  │
          │       · o: 速い │        │                  │                  │                  │
          │                 │        │                  │                  │                  │
          │       · x: 遅い │        │                  │                  │                  │
          ├─────────────────┼────────┼──────────────────┼──────────────────┼──────────────────┤
          │更新速度         │ ooo    │ o                │ o                │ x                │
          │                 │        │                  │                  │                  │
          │       · o: 速い │        │                  │                  │                  │
          │                 │        │                  │                  │                  │
          │       · x: 遅い │        │                  │                  │                  │
          ├─────────────────┼────────┼──────────────────┼──────────────────┼──────────────────┤
          │サイズ           │ ooo    │ o                │ oo               │ x                │
          │                 │        │                  │                  │                  │
          │       · o: 小さ │        │                  │                  │                  │
          │         い      │        │                  │                  │                  │
          │                 │        │                  │                  │                  │
          │       · x: 大き │        │                  │                  │                  │
          │         い      │        │                  │                  │                  │
          ├─────────────────┼────────┼──────────────────┼──────────────────┼──────────────────┤
          │キー変更         │ -      │ x                │ x                │ o                │
          ├─────────────────┼────────┼──────────────────┼──────────────────┼──────────────────┤
          │共通接頭辞検索   │ -      │ x                │ o                │ o                │
          ├─────────────────┼────────┼──────────────────┼──────────────────┼──────────────────┤
          │前方一致検索     │ -      │ x                │ o                │ o                │
          ├─────────────────┼────────┼──────────────────┼──────────────────┼──────────────────┤
          │範囲検索         │ -      │ x                │ o                │ o                │
          └─────────────────┴────────┴──────────────────┴──────────────────┴──────────────────┘

   TABLE_NO_KEY
       TABLE_NO_KEY  はとても高速でとても小さいのですが、キーをサポートしていません。キーをサポー
       トしていないテーブルは TABLE_NO_KEY だけです。

       TABLE_NO_KEY    を全文検索用の語彙表として使うことはできません。これは、語彙表はトークンを
       キーとして保存する必要があるからです。 TABLE_NO_KEY はログのようにキーのないレコードを管理
       するテーブルとして有用です。

   TABLE_HASH_KEY
       TABLE_HASH_KEY  は高速ですが、共通接頭辞検索や前方一致検索といった高度な検索機能をサポート
       していません。

       TABLE_HASH_KEY はタグ検索のように完全一致検索用のインデックスとして有用です。

   TABLE_PAT_KEY
       TABLE_PAT_KEY は、小さく、高度な検索機能もサポートしています。

       TABLE_PAT_KEY は全文検索用の語彙表としても有用ですし、範囲検索用のインデックスとしても有用
       です。

   TABLE_DAT_KEY
       TABLE_DAT_KEY は高速でキーの更新もサポートしていますが、サイズが大きいです。大量のレコード
       を保存する用途には向いていません。キーの更新をサポートしているテーブルは TABLE_DAT_KEY  だ
       けです。

       TABLE_DAT_KEY はGroongaのデータベース内で使われています。Groongaのデータベースは ShortTextTokenBigram  、テーブル名などオブジェクトの名前をオブジェクトのIDに変換する必要がありま
       す。さらに、Groongaのデータベースはオブジェクト名の変更もサポートする必要があります。これ
       らの機能は TABLE_DAT_KEY で実現されています。オブジェクト数は小さいので TABLE_DAT_KEY のサ
       イズが大きいというデメリットは無視できます。

   レコードID
       レコードIDは自動的に割り当てられます。明示的に割り当てるレコードIDを指定することはできませ
       ん。

       削除されたレコードのレコードIDは再利用される可能性があります。

       妥当なレコードIDの範囲は1から268435455までです。(1も268435455も妥当なIDです。)

   永続テーブルと一時テーブル
       テーブルは永続テーブルまたは一時テーブルです。

   永続テーブル
       永続テーブルは名前がついていてデータベースに登録されています。永続テーブルの中のレコードは
       テーブルやデータベースを閉じた後でも消えません。

       永続テーブルは /reference/commands/table_create コマンドで作成します。

   一時テーブル
       一時テーブルには名前がありません。一時テーブルのレコードはテーブルを閉じると削除されま
       す。一時テーブルは検索結果やソート結果、グループ(ドリルダウン)結果などを格納するために使
       われています。検索結果とグループ結果には  TABLE_HASH_KEY  が使われています。ソート結果には
       TABLE_NO_KEY が使われています。

   制限
       最大レコード数は268435455です。1つのテーブルに268435456以上のレコードを追加できません。

       最大キーサイズは4096バイトです。4097バイト以上の大きいキーは使うことができません。4097バイ
       ト以上の大きなサイズのデータはキーではなくカラムに保存してください。  TextLargeText 型
       は4097バイト以上の大きさのサイズのデータをサポートしています。

       キーサイズの合計の最大値は4GiBです。キーサイズの合計が4GiBを超える場合は、テーブルを分割し
       たり、データベースを分割したり(シャーディング)、それぞれのキーのサイズを減らしてくださ
       い。

   参考
       · /reference/commands/table_create

   カラム
       カラムはデータストアオブジェクトまたは高速な検索のための転置索引オブジェクトです。

       カラムは必ず1つのテーブルに属します。テーブルは0個以上のカラムを持ちます。

       データストアカラムもインデックスカラムもどちらも型を持ちます。データストアカラムの型は値域
       を指定します。言い換えると、データストアカラムの型は「値の型」です。インデックスカラムの型
       はインデックス対象のドキュメント集合を指定します。Groongaではテーブルがドキュメント集合に
       なります。よって、インデックスカラムの型はテーブルにしなければいけません。

       以下がデータストアカラムです。

   スカラーカラム
   概要
       TODO

   使い方
       TODO

   ベクターカラム
   概要
       ベクターカラムはデータストアオブジェクトです。ベクターカラムは0個以上のスカラー値を保存で
       きます。ざっくり言うと、スカラー値とは数値や文字列といった1つの値のことです。スカラー値の
       詳細は scalar を参照してください。

       ベクターカラムのユースケースの1つはタグの保存です。ベクターカラムを使うとタグの値を複数保
       存できます。

       スカラーカラムと同じように、ベクターカラムもインデックスを使って検索できます。各要素に重み
       をつけることもできます。1以上の重みがついた要素がマッチすると、重みがついていない場合より
       も大きなスコアがつきます。これはベクターカラム特有の機能です。重みも保存できるベクターカラ
       ムのことは重み付きベクターカラムと呼びます。

       各要素がテキストなら、各要素に対して全文検索することもできます。しかし、重みを使った場合は
       検索スコアが高くなりすぎることに注意してください。重み付きベクターカラムに対して全文検索を
       するときは注意してください。

   使い方
       ベクターカラムには3種類あります。

          · ノーマルベクターカラム

          · 参照型ベクターカラム

          · 重み付きベクターカラム

       このセクションではこれらの種類の使い方について説明します。

   ノーマルベクターカラム
       ノーマルベクターカラムは0個以上のスカラーデータを保存します。スカラーデータとは、例え
       ば、数値や文字列です。

       ノーマルベクターカラムは同じ型の要素だけを保存できます。型を混ぜることはできません。例え
       ば、同じノーマルベクターカラムに数値と文字列を保存できません。

       ノーマルベクターカラムは、1つのレコードが、1つのキーに対して複数の値を持っているときに便利
       です。タグは一番よくあるユースケースです。

   作り方
       ノーマルベクターカラムを作るためには  /reference/commands/column_create   コマンドを使いま
       す。ポイントは COLUMN_VECTOR フラグです。

       実行例:

          table_create Bookmarks TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Bookmarks tags COLUMN_VECTOR ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       1つのブックマークに0個以上のタグを設定できます。

   ロード方法
       JSONの配列構文で指定してベクターデータをロードします:

          [ELEMENT1, ELEMENT2, ELEMENT3, ...]

       以下のデータをロードしましょう。

                        ┌────────────────────┬─────────────────────────────────┐
                        │_keytags                            │
                        ├────────────────────┼─────────────────────────────────┤
                        │http://groonga.org/["groonga"]                     │
                        ├────────────────────┼─────────────────────────────────┤
                        │http://mroonga.org/["mroonga", "mysql", "groonga"] │
                        ├────────────────────┼─────────────────────────────────┤
                        │http://ranguba.org/["ruby", "groonga"]             │
                        └────────────────────┴─────────────────────────────────┘

       以下がデータをロードするコマンドです。

       実行例:

          load --table Bookmarks
          [
          {"_key": "http://groonga.org/", "tags": ["groonga"]},
          {"_key": "http://mroonga.org/", "tags": ["mroonga", "mysql", "groonga"]},
          {"_key": "http://ranguba.org/", "tags": ["ruby", "groonga"]}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]

       ロードしたデータはJSONの配列構文で出力されます。

       実行例:

          select Bookmarks
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "tags",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "http://groonga.org/",
          #         [
          #           "groonga"
          #         ]
          #       ],
          #       [
          #         2,
          #         "http://mroonga.org/",
          #         [
          #           "mroonga",
          #           "mysql",
          #           "groonga"
          #         ]
          #       ],
          #       [
          #         3,
          #         "http://ranguba.org/",
          #         [
          #           "ruby",
          #           "groonga"
          #         ]
          #       ]
          #     ]
          #   ]
          # ]

   検索方法
       ノーマルベクターカラムを検索するにはインデックスを作る必要があります。

       実行例:

          table_create Tags TABLE_PAT_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Tags bookmark_index COLUMN_INDEX Bookmarks tags
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       ベクターカラム固有の方法はありません。スカラーカラムにインデックスを作る方法と同じです。

       全文検索と同じ構文で tags 内の要素を検索できます。

       select-match-columns と select-query を使った場合:

       実行例:

          select Bookmarks --match_columns tags --query mysql --output_columns _key,tags,_score
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "tags",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "http://mroonga.org/",
          #         [
          #           "mroonga",
          #           "mysql",
          #           "groonga"
          #         ],
          #         1
          #       ]
          #     ]
          #   ]
          # ]

       select-match-columns の中で重みを使うこともできます。

       実行例:

          select Bookmarks --match_columns 'tags * 3' --query mysql --output_columns _key,tags,_score
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         1
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "tags",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "http://mroonga.org/",
          #         [
          #           "mroonga",
          #           "mysql",
          #           "groonga"
          #         ],
          #         3
          #       ]
          #     ]
          #   ]
          # ]

       select-filter を使った場合:

       実行例:

          select Bookmarks --filter 'tags @ "msyql"' --output_columns _key,tags,_score
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         0
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "tags",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ]
          #     ]
          #   ]
          # ]

   参照型ベクターカラム
       TODO

       Reference  vector  column  is  space-efficient  if  there  are  many  same value elements.
       Reference vector column keeps reference record IDs not value itself. Record ID is  smaller
       than value itself.

   作り方
       TODO

   ロード方法
       TODO

   検索方法
       TODO

   重み付きベクターカラム
       重み付きベクターカラムはノーマルベクターカラムに似ています。複数の要素を保存できます。さら
       に、要素の重みも保存できます。重みとはその要素の重要度です。

       重みは正の整数です。デフォルトの重みは 0 です。これは重みがないという意味になります。

       重みが1以上なら、検索スコアーに重みが加算されます。重みが 0 なら検索スコアーは 1  です。重
       みが 10 なら検索スコアーは 11= 1 + 10 )です。

       重み付きベクターカラムは検索スコアーのチューニングに便利です。  select-adjuster も参照して
       ください。特定のレコードの検索スコアーを増やすことができます。

   制限
       今のところいくつか制限があります。将来的には解消される予定です。

       以下が制限です。

          · ロード時に要素の値を文字列での表現で指定しなければいけません。例えば、数値の29を指定
            するために、 29 を使うことはできません。 "29" と文字列で表記する必要があります。

   作り方
       重み付きベクターカラムを作るには  /reference/commands/column_create を使います。ポイントは
       COLUMN_VECTOR|WITH_WEIGHT フラグです。

       実行例:

          table_create Bookmarks TABLE_HASH_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Bookmarks tags COLUMN_VECTOR|WITH_WEIGHT ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       WITH_WEIGHT フラグを指定しないと、ただのノーマルベクターカラムになります。

       1つのブックマークに重み付きで0個以上のタグを設定できます。

   ロード方法
       JSONのオブジェクト構文でベクターデータをロードします:

          {"ELEMENT1": WEIGHT1, "ELEMENT2": WEIGHT2, "ELEMENT3": WEIGHT3, ...}

       以下のデータをロードしましょう。

                        ┌────────────────────┬──────────────────────────────────┐
                        │_keytags                             │
                        ├────────────────────┼──────────────────────────────────┤
                        │http://groonga.org/{"groonga": 100}                 │
                        ├────────────────────┼──────────────────────────────────┤
                        │http://mroonga.org/{"mroonga":  100,  "mysql":  50, │
                        │                    │ "groonga": 10}                   │
                        ├────────────────────┼──────────────────────────────────┤
                        │http://ranguba.org/{"ruby": 100, "groonga": 50}     │
                        └────────────────────┴──────────────────────────────────┘

       以下がデータをロードするコマンドです。

       実行例:

          load --table Bookmarks
          [
          {"_key": "http://groonga.org/",
           "tags": {"groonga": 100}},
          {"_key": "http://mroonga.org/",
           "tags": {"mroonga": 100,
                    "mysql":   50,
                    "groonga": 10}},
          {"_key": "http://ranguba.org/",
           "tags": {"ruby": 100,
                    "groonga": 50}}
          ]
          # [[0, 1337566253.89858, 0.000355720520019531], 3]

       ロードしたデータはJSONのオブジェクト構文で出力されます。

       実行例:

          select Bookmarks
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_id",
          #           "UInt32"
          #         ],
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "tags",
          #           "ShortText"
          #         ]
          #       ],
          #       [
          #         1,
          #         "http://groonga.org/",
          #         {
          #           "groonga": 100
          #         }
          #       ],
          #       [
          #         2,
          #         "http://mroonga.org/",
          #         {
          #           "mroonga": 100,
          #           "groonga": 10,
          #           "mysql": 50
          #         }
          #       ],
          #       [
          #         3,
          #         "http://ranguba.org/",
          #         {
          #           "ruby": 100,
          #           "groonga": 50
          #         }
          #       ]
          #     ]
          #   ]
          # ]

   検索方法
       重み付きベクターを検索するためにはインデックスを作る必要があります。    column_createWITH_WEIGHT フラグを指定することを忘れないでください。

       実行例:

          table_create Tags TABLE_PAT_KEY ShortText
          # [[0, 1337566253.89858, 0.000355720520019531], true]
          column_create Tags bookmark_index COLUMN_INDEX|WITH_WEIGHT Bookmarks tags
          # [[0, 1337566253.89858, 0.000355720520019531], true]

       WITH_WEIGHT 以外は重み付きベクターカラムに特有の方法はありません。スカラーカラムにインデッ
       クスを作る方法と同じです。

       全文検索と同じ構文で tags 内の要素を検索できます。

       select-match-columns と select-query を使った場合:

       実行例:

          select Bookmarks --match_columns tags --query groonga --output_columns _key,tags,_score
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "tags",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "http://groonga.org/",
          #         {
          #           "groonga": 100
          #         },
          #         101
          #       ],
          #       [
          #         "http://mroonga.org/",
          #         {
          #           "mroonga": 100,
          #           "groonga": 10,
          #           "mysql": 50
          #         },
          #         11
          #       ],
          #       [
          #         "http://ranguba.org/",
          #         {
          #           "ruby": 100,
          #           "groonga": 50
          #         },
          #         51
          #       ]
          #     ]
          #   ]
          # ]

       select-match-columns  の重みと一緒に使うこともできます。スコアーは (1 + 重み付きベクターの
       重み) * match_columnsの重み 。

       実行例:

          select Bookmarks --match_columns 'tags * 3' --query groonga --output_columns _key,tags,_score
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "tags",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "http://groonga.org/",
          #         {
          #           "groonga": 100
          #         },
          #         303
          #       ],
          #       [
          #         "http://mroonga.org/",
          #         {
          #           "mroonga": 100,
          #           "groonga": 10,
          #           "mysql": 50
          #         },
          #         33
          #       ],
          #       [
          #         "http://ranguba.org/",
          #         {
          #           "ruby": 100,
          #           "groonga": 50
          #         },
          #         153
          #       ]
          #     ]
          #   ]
          # ]

       select-filter を使った場合:

       実行例:

          select Bookmarks --filter 'tags @ "groonga"' --output_columns _key,tags,_score
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "tags",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "http://groonga.org/",
          #         {
          #           "groonga": 100
          #         },
          #         101
          #       ],
          #       [
          #         "http://mroonga.org/",
          #         {
          #           "mroonga": 100,
          #           "groonga": 10,
          #           "mysql": 50
          #         },
          #         11
          #       ],
          #       [
          #         "http://ranguba.org/",
          #         {
          #           "ruby": 100,
          #           "groonga": 50
          #         },
          #         51
          #       ]
          #     ]
          #   ]
          # ]

   重みだけを適用する方法
       マッチしたレコード集合を変更せずに、重み付きベクターカラムの重みの分だけ検索スコアーを増や
       すことができます。

       この用途には select-adjuster を使います。

       実行例:

          select Bookmarks \
            --filter true \
            --adjuster 'tags @ "mysql" * 10 + tags @ "groonga" * 5' \
            --output_columns _key,tags,_score
          # [
          #   [
          #     0,
          #     1337566253.89858,
          #     0.000355720520019531
          #   ],
          #   [
          #     [
          #       [
          #         3
          #       ],
          #       [
          #         [
          #           "_key",
          #           "ShortText"
          #         ],
          #         [
          #           "tags",
          #           "ShortText"
          #         ],
          #         [
          #           "_score",
          #           "Int32"
          #         ]
          #       ],
          #       [
          #         "http://groonga.org/",
          #         {
          #           "groonga": 100
          #         },
          #         506
          #       ],
          #       [
          #         "http://mroonga.org/",
          #         {
          #           "mroonga": 100,
          #           "groonga": 10,
          #           "mysql": 50
          #         },
          #         566
          #       ],
          #       [
          #         "http://ranguba.org/",
          #         {
          #           "ruby": 100,
          #           "groonga": 50
          #         },
          #         256
          #       ]
          #     ]
          #   ]
          # ]

       この  select  コマンドは  --filter true を使っています。そのため、すべてのレコードがマッチ
       し、スコアーは1になります。それから、 --adjuster  を適用します。アジャスターは以下のことを
       します。

          · tags  @ "mysql" * 10"mysql" タグを含むレコードのスコアーを (1 + 重み) * 10 増やし
            ます。

          · tags @ "groonga" * 5"groonga" タグを含むレコードのスコアーを (1 + 重み) * 5  増や
            します。

       例えば、  "http://mroonga.org/"  レコードは  "mysql" タグと "groonga" タグを両方持っていま
       す。そのため、スコアーは 565= ((1 + 50) * 10) + ((1 + 10) * 5) = (51 * 10) + (11 *  5)
       = 510 + 55 )増えます。 --adjuster を適用する前は、--filter true によって検索スコアーは1に
       なっています。そのため、 "http://mroonga.org/" レコードの最終的な検索スコアーは 566= 1
       + 565 )になります。

   擬似カラム
   名前
       疑似カラム

   説明
       Groongaのデータベースで作成したテーブルには、いくつかのカラムが自動的に定義されます。

       こ