1GROONGA(1)                          groonga                         GROONGA(1)
2
3
4

NAME

6       groonga - groonga documentation
7
8       · news
9

THE CHARACTERISTICS OF GROONGA

11   The successor to the Senna that is an embeddable full text search engine
12       Groonga  is  developed  as  the successor project to Senna. Senna is an
13       embeddable full text search engine and it is used widely. Groonga takes
14       over  from  Senna's  characteristics  that are fast, high precision and
15       high flexibility. We started to develop groonga to improve those Senna'
16       characteristics.
17
18   Groonga sever supports multi-protocols such as HTTP
19       Senna  is  an  component  for  an  application  that supports full text
20       search. Groonga can be a  server  that  provides  search  service.  The
21       groonga  server  supports  HTTP,  memcached  binary  protocol  and gqtp
22       (groonga query transfer protocol). Clients can search by  those  proto‐
23       cols  via  TCP/IP  connection.  It makes easy to use on a rental server
24       that can install a library.
25
26       Groonga also can be used as a C library like Senna.
27
28   Fast data update
29       Senna that is predecessor of groonga is a full text search engine with‐
30       out  storage. Senna was commonly used with MySQL or PostgreSQL. Tritonn
31       is a custom MyISAM storage engine that uses Senna as full  text  search
32       engine.  Ludia  is  a extension module for a PostgreSQL to use Senna as
33       full text search engine. But those approaches can't fully  utilize  the
34       performance  characteristics  of  Senna. Senna can update index without
35       read lock.
36
37       For example, MyISAM acquires table lock while updating records in  many
38       cases.  In  those  cases, data update by MyISAM is a bottleneck however
39       Senna updates an index full text search fast.
40
41       Groonga implements a storage that doesn't acquires read lock to realize
42       search service that has immediacy.
43
44   Storage that can be shared with multi-processes and multi-threads
45       Groonga's   storage   file  can  be  shared  with  multi-processes  and
46       multi-threads. It doesn't require explicit lock.
47
48       Groonga storage engine that is the successor to the Tritonn  is  imple‐
49       mented  as a MySQL pruggable storage engine. Groonga storage files that
50       are opened by groonga storage engine can also be  shared  with  groonga
51       server.  For  example, you can update your data via SQL and search your
52       data via HTTP.
53
54   Fast aggregate query processing such as drilldown
55       Groonga's storage uses column oriented database model that stores  data
56       for  each  column. Column oriented database is suitable for fast aggre‐
57       gate query processing such as OLAP.
58
59       "Drilldown" is a processing that groups full text search result by each
60       specified  column  values  and  counts number of records in each group.
61       Groonga does the processing fast because groonga uses  column  oriented
62       database.
63
64   Improved Senna's inverted index implementation
65       Groonga's  inverted index is the improved Senna's inverted index. It is
66       more faster and more versatile.
67
68       Groonga can  also  process  some  complex  queries  fast  by  utilizing
69       inverted  index.  Those  queries  are difficult to process with SQL and
70       RDB. For example, tag search and drilldown can  be  processed  fast  by
71       utilizing inverted index.
72
73   Geolocation (latitude and longitude) search
74       Groonga  supports  geolocation  search.  Supported geodetic systems are
75       Japan geodetic system and world geodetic  system  (WGS  84).  Supported
76       geolocation  refinement  region types are circle and rectangle. Groonga
77       also supports distance between two coordinates.
78
79   Auto query cache mechanism
80       Groonga caches reference queries automatically.
81

INSTALL

83       We will explain of how to install Groonga for each environments.
84
85       The packages for 64-bit binary are only distributed.  Please  attention
86       not to distributing others for 32-bit binaly.
87
88   Debian GNU/Linux squeeze
89       Note   We only distribute the package for amd64.
90
91       /etc/apt/sources.list.d/groonga.list:
92
93       deb http://packages.groonga.org/debian/ squeeze main
94       deb-src http://packages.groonga.org/debian/ squeeze main
95
96       Install:
97
98       % sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 1C837F31
99       % sudo aptitude update
100       % sudo aptitude -V -D -y install groonga
101
102   Debian GNU/Linux wheezy
103       Note   We only distribute the package for amd64.
104
105       /etc/apt/sources.list.d/groonga.list:
106
107       deb http://packages.groonga.org/debian/ wheezy main
108       deb-src http://packages.groonga.org/debian/ wheezy main
109
110       Install:
111
112       % sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 1C837F31
113       % sudo aptitude update
114       % sudo aptitude -V -D -y install groonga
115
116   Debian GNU/Linux sid
117       Note   We only distribute the package for amd64.
118
119       /etc/apt/sources.list.d/groonga.list:
120
121       deb http://packages.groonga.org/debian/ unstable main
122       deb-src http://packages.groonga.org/debian/ unstable main
123
124       Install:
125
126       % sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 1C837F31
127       % sudo aptitude update
128       % sudo aptitude -V -D -y install groonga
129
130   Ubuntu 10.04 LTS Lucid Lynx
131       Note   We only distribute the package for amd64.
132
133       Note   You  should  add universe section in the official Ubuntu reposi‐
134              tory. The following describes how to add it.
135
136       /etc/apt/sources.list.d/groonga.list:
137
138       deb http://packages.groonga.org/ubuntu/ lucid universe
139       deb-src http://packages.groonga.org/ubuntu/ lucid universe
140
141       Install:
142
143       % sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 1C837F31
144       % sudo aptitude update
145       % sudo aptitude -V -D -y install groonga
146
147   Ubuntu 11.04 Natty Narwhal
148       Note   We only distribute the package for amd64.
149
150       Note   You should add universe section in the official  Ubuntu  reposi‐
151              tory. The following describes how to add it.
152
153       /etc/apt/sources.list.d/groonga.list:
154
155       deb http://packages.groonga.org/ubuntu/ natty universe
156       deb-src http://packages.groonga.org/ubuntu/ natty universe
157
158       Install:
159
160       % sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 1C837F31
161       % sudo aptitude update
162       % sudo aptitude -V -D -y install groonga
163
164   Ubuntu 11.10 Oneiric Ocelot
165       Note   We only distribute the package for amd64.
166
167       Note   You  should  add universe section in the official Ubuntu reposi‐
168              tory. The following describes how to add it.
169
170       /etc/apt/sources.list.d/groonga.list:
171
172       deb http://packages.groonga.org/ubuntu/ oneiric universe
173       deb-src http://packages.groonga.org/ubuntu/ oneiric universe
174
175       Install:
176
177       % sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 1C837F31
178       % sudo aptitude update
179       % sudo aptitude -V -D -y install groonga
180
181   CentOS 5
182       Note   We only distribute the package for amd64.
183
184       Install:
185
186       % sudo rpm -ivh http://packages.groonga.org/centos/groonga-repository-1.0.0-0.noarch.rpm
187       % sudo yum update
188       % sudo yum install -y groonga
189
190   CentOS 6
191       Note   We only distribute the package for amd64.
192
193       Install:
194
195       % sudo rpm -ivh http://packages.groonga.org/centos/groonga-repository-1.0.0-0.noarch.rpm
196       % sudo yum update
197       % sudo yum install -y groonga
198
199   Fedora 15
200       Note   We only distribute the package for amd64.
201
202       Install:
203
204       % sudo rpm -ivh http://packages.groonga.org/fedora/groonga-repository-1.0.0-0.noarch.rpm
205       % sudo yum update
206       % sudo yum install -y groonga
207
208   Mac OS X (MacPorts)
209       Install:
210
211       % git clone https://github.com/groonga/macports.git ~/groonga-macports
212       % (echo; echo file://$HOME/groonga-macports) | sudo sh -c "cat >> /opt/local/etc/macports/sources.conf"
213       % sudo port install groonga
214
215   Mac OS X (Homebrew)
216       Install:
217
218       % brew install groonga
219
220   Windows (Installer)
221       Note   We only distribute the package for x64.
222
223       You     just     download     installer      (.exe      file)      from
224       packages.groonga.org/windows/ and execute it.
225
226   Windows (zip)
227       Note   We only distribute the package for x64.
228
229       You  just  download  zip-file  from  packages.groonga.org/windows/  and
230       extract it.
231
232   Others
233       If you will use indexes of tokenizing of each  morpheme  for  full-text
234       search, you should install MeCab before you install groonga.
235
236       After,       you       should       download      tar.gz-file      from
237       packages.groonga.org/source/ for installing groonga. You should extract
238       this file in place to install, and run commands below-mentioned.
239
240       ./configure --prefix=/usr --localstatedir=/var && make && sudo make install
241
242       The  "prefix"  option  is the paramater for specified place to install.
243       If you won't specify the option,  "/usr/local"  is  specified.   Please
244       specify  "/usr"  for  this  option  if you don't know environment vari‐
245       ables(LD_LIBRARY_PATH and so on) well.
246

COMMUNITY

248       There are some places for sharing groonga information.  We welcome  you
249       to join our community.
250
251   Mailing List
252       There are mailing lists for discussion about groonga.
253
254       For Japanese developers
255              groonga-dev@lists.sourceforge.jp
256

チュートリアル

258   基本的な操作
259       groongaは、Cのライブラリとして使用する方法と、groonga実行ファイルを通して使用する方法があります。
260
261       本チュートリアルでは、groonga実行ファイルを使用する方法について説明します。
262
263       groonga実行ファイルを使って、DBの作成・操作・サーバの起動・サーバへの接続などの操作が行えます。
264
265   DBの作成
266       以下のようなコマンドを実行すると、データベースを新規に作成することができます。
267
268       書式
269
270       groonga -n データベースパス名
271
272       -nオプションは、データベースを作ることを示します。
273
274       データベースパス名には、新しく作成するデータベースのフルパス名を指定します。
275
276       上記コマンドでデータベースを作成すると、そのまま対話モードと呼ばれるコマンドを受け付けるモードになります。Ctrlキーを押しながらdキーを押すと、対話モードから抜けることができます。
277
278       実行例:
279
280       % groonga -n /tmp/tutorial.db
281       > ctrl-d
282       %
283
284   DBの操作
285       書式
286
287       groonga DBパス名 [コマンド]
288
289       既存のデータベースのフルパス名をDBパス名に指定します。
290       コマンドを指定すると、実行結果を返します。
291
292       コマンドを指定しない場合には、対話モードに入ります。
293       対話モードでは、標準入力からコマンドを読み込み、順次実行します。
294       本チュートリアルでは、対話モードを主に使用します。
295
296       たとえば、statusというコマンドを実行してみましょう。sta‐
297       tusコマンドは、groongaの実行状態を返すコマンドです。
298
299       Execution example:
300
301       > table_create --name Type --flags TABLE_HASH_KEY --key_type ShortText
302       [[0,1317212791.02322,0.03942904],true]
303       > column_create --table Type --name number --type Int32
304       [[0,1317212791.26314,0.124383285],true]
305       > column_create --table Type --name float --type Float
306       [[0,1317212791.58803,0.027924039],true]
307       > column_create --table Type --name string --type ShortText
308       [[0,1317212791.81654,0.040399047],true]
309       > column_create --table Type --name time --type Time
310       [[0,1317212792.05751,0.027354067],true]
311       > load --table Type
312       > [{"_key":"sample","number":12345,"float":42.195,"string":"GROONGA","time":1234567890.12}]
313       [[0,1317212792.28516,0.200775839],1]
314       > select --table Type
315       [[0,1317212792.68655,0.000199477],[[[1],[["_id","UInt32"],["_key","ShortText"],["time","Time"],["string","ShortText"],["number","Int32"],["float","Float"]],[1,"sample",1234567890.12,"GROONGA",12345,42.195]]]]
316
317       以上のように、コマンドの実行結果は基本的にjson形式で返却されます。jsonの配列の0番目の要素に、エラーコードや実行時間などの情報が入ります。jsonの配列の1番目の様子に、コマンドの実行結果が入ります。
318
319   コマンド
320       groonga実行ファイルやgroongaサーバを介して様々なコマンドを実行して、DBを操作することができます。
321       コマンドは以下の書式のうちいずれかで与えることができます。
322
323       書式1: コマンド名 引数1 引数2 ..
324
325       書式2: コマンド名 --引数名1 値1 --引数名2 値2 ..
326
327       書式1と2は混ぜて使うことができます。
328
329       書式2において、空白や、記号「"'()」のうちいずれかを含む値を指定したい場合は、シングルクォート(')かダブルクォート(")で値を囲みます。
330
331       詳しくは、 /executables/groonga のコマンドの項を参考にしてください。
332
333   主なコマンド
334          /commands/status
335                 groongaプロセスの状態を表示します。
336
337          /commands/table_list
338                 DBに定義されているテーブルのリストを表示します。
339
340          /commands/column_list
341                 テーブルに定義されているカラムのリストを表示します。
342
343          /commands/table_create
344                 DBにテーブルを追加します。
345
346          /commands/column_create
347                 テーブルにカラムを追加します。
348
349          /commands/select
350                 テーブルに含まれるレコードを検索して表示します。
351
352          /commands/load
353                 テーブルにレコードを挿入します。
354
355   テーブルの作成
356       /commands/table_create コマンドを使用してテーブルを作成します。
357
358       groongaでは、多くの場合テーブルを作成する際に主キーが必要となります。また、主キーには型と、その格納方法を指定する必要があります。
359
360       型については、のちのチュートリアルで触れます。データの種類をあらわしているもの、とイメージしてください。
361
362       主キーの格納方法によって、主キーでの検索速度や、前方一致検索の可否が決まります。これも、のちのチュートリアルで触れます。
363
364       ここでは、Short‐
365       Text型の主キー値を持ち、主キーの格納方法はHASHである、'Site'という名前のテーブルを作成します。
366
367       Execution example:
368
369       > column_create --table Site --name link --type Site
370       [[0,1317212792.88872,0.060705006],true]
371       > load --table Site
372       > [{"_key":"http://example.org/","link":"http://example.net/"}]
373       [[0,1317212793.14984,0.200481934],1]
374       > select --table Site --output_columns _key,title,link._key,link.title --query title:@this
375       [[0,1317212793.55084,0.000485897],[[[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."]]]]
376
377   検索
378       /commands/select
379       コマンドを用いて、テーブルの中身を表示することができます。
380
381       Execution example:
382
383       > column_create --table Site --name links --flags COLUMN_VECTOR --type Site
384       [[0,1317212793.75262,0.049658904],true]
385       > load --table Site
386       > [{"_key":"http://example.org/","links":["http://example.net/","http://example.org/","http://example.com/"]}]
387       [[0,1317212794.00274,0.200473621],1]
388       > select --table Site --output_columns _key,title,links._key,links.title --query title:@this
389       [[0,1317212794.40349,0.000384272],[[[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."]]]]]
390
391       selectにテーブル名を指定すると、指定したテーブルの中身を10件表示します。[0]は検索されたレコードの件数、["_id","Uint32"]は値がUInt32型である"_id'という名前のカラム、["_key","Short‐
392       Text"]は値がShortText型である'_key'という名前のカラムを示しています。
393
394       table_cre‐
395       ateコマンドで作成したテーブルには、最初から'_id'/'_key'という2つのカラムがあります。'_id'はgroongaが自動的に付与するID番号が格納されるカラムです。'_key'は主キーが格納されるカラムです。これらのカラム名を変更することはできません。
396
397   カラムの作成
398       /commands/column_create
399       コマンドを用いて、カラムを作成することができます。
400
401       ShortText型の値を持つ、'com‐
402       ment'という名前のカラムを'Site'テーブルに追加しましょう。
403
404       Execution example:
405
406       > column_create --table Site --name title --flags COLUMN_SCALAR --type ShortText
407       [[0,1317212712.91734,0.077833747],true]
408       > select --table Site
409       [[0,1317212713.19572,0.000121119],[[[0],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"]]]]]
410
411       COLUMN_SCALARについては、通常のカラムであることを示しています。
412
413   全文検索用の語彙表の作成
414       このチュートリアルでは、groongaに登録したデータを用いた全文検索を行います。
415
416       全文検索を行う場合は、まず語彙表を作成する必要があります。
417       語彙表とは、文書の中にある単語が主キーとなるテーブルです。
418       ここでは、Short‐
419       Text型の主キー値を持つ、'Terms'という名前のテーブルを作成しました。
420
421       Execution example:
422
423       > table_create --name Terms --flags TABLE_PAT_KEY|KEY_NORMALIZE --key_type ShortText --default_tokenizer TokenBigram
424       [[0,1317212713.39679,0.092312046],true]
425
426       この実行例には、多くのパラメータが指定されています。本チュートリアルでは、これらをすべて理解する必要はありません。以下に簡単な説明を記しますが、読み飛ばしてもらってかまいません。
427
428       実行例にある、TABLE_PAT_KEY|KEY_NORMAL‐
429       IZEという値は、主キー値をパトリシア木に格納し、各語彙を正規化して登録することを示しています。
430
431       実行例にある、TokenBigramという値は、
432       語彙表として使用するテーブルは、対象の文書をトークナイズする方式を、default_tok‐
433       enizerパラメータで与えます。この例ではTokenBi‐
434       gramを指定しています。よって、一般的にN-gramと呼ばれるようなインデックス方式を選択しています。
435
436   全文検索用のインデックスカラムの作成
437       Siteテーブルのtitleカラムを全文検索の対象としたいとしましょう。その場合には、語彙表にインデックス型のカラムを作成します。
438
439       Execution example:
440
441       > column_create --table Terms --name blog_title --flags COLUMN_INDEX|WITH_POSITION --type Site --source title
442       [[0,1317212713.68994,0.19739078],true]
443
444       Siteテーブルのtitleカラムを検索対象とする、'blog_title'という名前のインデックス型カラムをTermsテーブルに作成しました。インデックス対象となるテーブルをtypeに、インデックス対象となるカラムをsourceに指定します。
445
446       実行例のflagsのCOLUMN_INDEX|WITH_POSI‐
447       TIONという値は、語彙の位置情報を格納するインデックス型のカラムであることを示しています。通常の全文検索インデックスでは、COL‐
448       UMN_INDEX|WITH_POSI‐
449       TIONを指定してください。語彙の位置情報を格納する意味については、本チュートリアルでは触れません。
450
451   データのロード
452       /commands/load
453       コマンドを使用します。loadコマンドでは、jsonで受け取ったデータをテーブルに格納します。
454
455       Execution example:
456
457       > load --table Site
458       > [
459       > {"_key":"http://example.org/","title":"This is test record 1!"},
460       > {"_key":"http://example.net/","title":"test record 2."},
461       > {"_key":"http://example.com/","title":"test test record three."},
462       > {"_key":"http://example.net/afr","title":"test record four."},
463       > {"_key":"http://example.org/aba","title":"test test test record five."},
464       > {"_key":"http://example.com/rab","title":"test test test test record six."},
465       > {"_key":"http://example.net/atv","title":"test test test record seven."},
466       > {"_key":"http://example.org/gat","title":"test test record eight."},
467       > {"_key":"http://example.com/vdw","title":"test test record nine."},
468       > ]
469       [[0,1317212714.08816,2.203527402],9]
470
471       selectコマンドで、データが入っていることを確認しましょう。
472
473       Execution example:
474
475       > select --table Site
476       [[0,1317212716.49285,0.000270908],[[[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."]]]]
477
478   データの検索
479       groongaでは、'_id'カラムと'_key'カラムの値はテーブル中で一意です。よって、それを用いて検索してみましょう。
480
481       selectコマンドにおいて、queryパラメータを用いるとデータの検索を行うことができます。
482
483       Execution example:
484
485       > select --table Site --query _id:1
486       [[0,1317212716.69871,0.000308514],[[[1],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"]],[1,"http://example.org/","This is test record 1!"]]]]
487
488       queryパラメータに与えた「_id:1」というのは、'_id'という名前のカラムに'1'という値が入っているレコードを検索する、という意味です。
489
490       _keyでも検索してみましょう。
491
492       Execution example:
493
494       > select --table Site --query "_key:\"http://example.org/\""
495       [[0,1317212716.9005,0.000478343],[[[1],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"]],[1,"http://example.org/","This is test record 1!"]]]]
496
497       queryパラメータに与えた「_key:"‐
498       http://example.org/"」というのは、'_key'という名前のカラムに'"‐
499       http://exam
500       ple.org/"'という値が入っているレコードを検索する、という意味です。
501
502   全文検索
503       queryパラメータでは、インデックスを用いた全文検索を行うこともできます。
504
505       Execution example:
506
507       > select --table Site --query title:@this
508       [[0,1317212717.10303,0.000581287],[[[1],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"]],[1,"http://example.org/","This is test record 1!"]]]]
509
510       titleカラムに対して、'this'という文字列で全文検索を行った結果を返します。
511
512       queryパラメータに与えた「title:@this」というのが、'title'という名前のカラムに'this'という文字列が含まれているレコードを検索する、という意味です。
513
514       selectコマンドには、match_col‐
515       umnsというパラメータが存在します。これを指定すると、query内にカラム名を指定しない条件があった場合、match_col‐
516       umnsで指定されたカラムに対しての検索であることを示します。[1]_
517
518       match_col‐
519       umnsパラメータに'title'、queryパラメータに'this'という文字列を指定すると、上記のクエリと同じ結果を得ることができます。
520
521       Execution example:
522
523       > select --table Site --match_columns title --query this
524       [[0,1317212717.30596,0.000716439],[[[1],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"]],[1,"http://example.org/","This is test record 1!"]]]]
525
526   出力カラムの指定
527       selectコマンドにおいて、output_col‐
528       umnsパラメータを用いることで、検索結果で表示するカラムを指定することが出来ます。
529
530       複数のカラムを指定する場合は、カンマ(,)区切りで指定します。
531
532       Execution example:
533
534       > select --table Site --output_columns _key,title,_score --query title:@test
535       [[0,1317212717.50916,0.00060758],[[[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]]]]
536
537       groongaの検索結果には、「_score」という名前のカラムが追加されています。このカラムは、全文検索の条件が合致する文書ほど高い数値が入ります。
538
539   表示範囲指定
540       selectコマンドにおいて、off‐
541       set,limitパラメータを用いることで、検索結果から指定された範囲のみを表示することが出来ます。大量の検索結果をページで分けて、1ページ分のみを表示したい場合に有効です。
542
543       off‐
544       setパラメータには、検索結果を返す始点を指定します。1件目から結果を返す場合には、0を指定します。
545
546       limitパラメータには、検索結果を何件表示するのかを指定します。
547
548       Execution example:
549
550       > select --table Site --offset 0 --limit 3
551       [[0,1317212717.71574,0.000238544],[[[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."]]]]
552       > select --table Site --offset 3 --limit 3
553       [[0,1317212717.91925,0.00023617],[[[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."]]]]
554       > select --table Site --offset 7 --limit 3
555       [[0,1317212718.12219,0.00019999],[[[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."]]]]
556
557   並び替え
558       selectコマンドにおいて、sortbyパラメータを用いることで、検索結果を並び替えることが出来ます。
559
560       sortbyパラメータにカラム名を指定することで、そのカラムの値で昇順にソートします。また、カラム名の前にハイフン(-)を付けることで、降順にソートすることも出来ます。
561
562       Execution example:
563
564       > select --table Site --sortby -_id
565       [[0,1317212718.32565,0.000385755],[[[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!"]]]]
566
567       出力カラムの指定で紹介した「_score」カラムは、ソートの条件としても使うことができます。
568
569       Execution example:
570
571       > select --table Site --query title:@test --output_columns _id,_score,title --sortby _score
572       [[0,1317212718.5331,0.000667311],[[[9],[["_id","UInt32"],["_score","Int32"],["title","ShortText"]],[1,1,"This is test record 1!"],[2,1,"test record 2."],[4,1,"test record four."],[3,2,"test test record three."],[9,2,"test test record nine."],[8,2,"test test record eight."],[7,3,"test test test record seven."],[5,3,"test test test record five."],[6,4,"test test test test record six."]]]]
573
574       ソートするカラム名を複数指定したい場合は、カンマ(,)区切りで指定します。複数のカラムを指定した場合、最初のカラムで同一の値のレコードがあった場合に、次のカラムの値でソートさせることができます。
575
576       Execution example:
577
578       > select --table Site --query title:@test --output_columns _id,_score,title --sortby _score,_id
579       [[0,1317212718.73819,0.00069225],[[[9],[["_id","UInt32"],["_score","Int32"],["title","ShortText"]],[1,1,"This is test record 1!"],[2,1,"test record 2."],[4,1,"test record four."],[3,2,"test test record three."],[8,2,"test test record eight."],[9,2,"test test record nine."],[5,3,"test test test record five."],[7,3,"test test test record seven."],[6,4,"test test test test record six."]]]]
580       脚注
581
582       [1]  現在のバージョンでは、全文検索インデックスが存在する場合にのみ、match_col‐
583            umnsパラメータを利用することができます。通常のカラムでの絞り込みには利用できません。
584
585   How to use groonga with network
586       You  can  use  groonga  with network. When you run groonga by using the
587       groonga original protocol or HTTP, groonga accepts connection for  net‐
588       work.
589
590   Connect with groonga's original protocol
591   Run groonga daemon
592       Form:
593
594       groonga [-p PORT_NUMBER] -d DB_PATH_NAME
595
596       The  DB_PATH_NAME is set the full-path of existing database.  With this
597       form, you can run groonga as a daemon and connect by with groonga orig‐
598       inal protocol on PORT_NUMBER.  (The port number is 10041 when you don't
599       specify PORT_NUMBER.)
600
601       Execution example:
602
603       % groonga -d /tmp/groonga-databases/introduction.db
604       12345
605       %
606
607       Groonga shows its process ID on daemon mode.
608
609   Connect to groonga server
610       Form:
611
612       groonga [-p PORT_NUMBER] -c [HOST_NAME_OR_IP_ADDRESS]
613
614       This  command  connects  to  groonga  server   running   at   specified
615       HOST_NAME_OR_IP_ADDRESS.
616
617       When  you  don't specify HOST_NAME_OR_IP_ADDRESS, this command connects
618       to  groonga  server  running  at  localhost.  When  you  don't  specify
619       PORT_NUMBER, 10041 is used.
620
621       Groonga  runs  in interactive mode after connect to groonga server suc‐
622       cessfully. Groonga reads command from standard input and  evaluates  it
623       repeatedly.
624
625       Execution example:
626
627       % groonga -c
628       > status
629       [[0,1317212813.13814,0.000102148],{"alloc_count":184,"starttime":1317212806,"uptime":7,"version":"1.2.5-84-g5c190df","n_queries":14,"cache_hit_rate":0.0,"command_version":1,"default_command_version":1,"max_command_version":2}]
630       > ctrl-d
631       %
632
633   Terminate groonga daemon
634       You can terminate groonga daemon with shutdown command.
635
636       Execution example:
637
638       % groonga -c
639       > shutdown
640       %
641
642   Connect with HTTP
643       You  need  to  run  groonga  in HTTP protocol mode when you want to use
644       groonga via HTTP.
645
646       Form:
647
648       groonga [-p PORT_NUMBER] -d --protocol http DB_PATH_NAME
649
650       --protocol option specifies a protocol of groonga  server.  http  means
651       that groonga accepts connections via HTTP.
652
653   Administration tool based on HTML
654       You    can    access    administration    tool   based   on   HTML   at
655       http://[HOST_NAME_OR_IP_ADDRESS]:[PORT_NUMBER]/ after the above command
656       is ran. Your browser must enables JavaScript.
657
658   Run command with HTTP
659       You can run command at /d/COMMAND_NAME when groonga is ran in HTTP pro‐
660       tocol mode.
661
662       Command options are passed  as  HTTP's  GET  parameters.  They  are  in
663       ?OPTION=VALUE&OPTION=VALUE&... form.
664
665       Execution example:
666
667       http://[IPまたはホスト名]:[ポート番号]/d/status
668       実行される処理:
669       > status
670       [[0,1317212813.33982,0.000109691],{"alloc_count":184,"starttime":1317212806,"uptime":7,"version":"1.2.5-84-g5c190df","n_queries":14,"cache_hit_rate":0.0,"command_version":1,"default_command_version":1,"max_command_version":2}]
671
672       http://[IPまたはホスト名]:[ポート番号]/d/select?table=Site&query=title:@this
673       実行される処理:
674       > select --table Site --query title:@this
675       [[0,1317212813.54112,6.7993e-05],[[[1],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"]],[1,"http://example.org/","This is test record 1!"]]]]
676
677   Security
678       Network service of groonga doesn't support authentication. Everyone can
679       view and modify the database. We recommend  that  you  restrict  client
680       accesses  by  IP  address. You can use iptables or any similar tool for
681       it.
682
683   さまざまな種類をもったデータの保存
684       groongaでは、さまざまなデータを格納させることが出来ます。
685
686   データ型
687       groongaでは、数値(整数・小数)や文字列や時刻や経緯度などの情報を格納することができます。
688
689       ここでは、Int32型のカラムに整数を格納、Float型のカラムに浮動小数点の小数を、Short‐
690       Text型のカラムに文字列を、Time型のカラムに時間を格納する例を示します。経緯度の格納については、のちのチュートリアルで触れます。
691
692       その他のデータ型の一覧は、 /type を参照してください。
693
694       Execution example:
695
696       > table_create --name Type --flags TABLE_HASH_KEY --key_type ShortText
697       [[0,1317212791.02322,0.03942904],true]
698       > column_create --table Type --name number --type Int32
699       [[0,1317212791.26314,0.124383285],true]
700       > column_create --table Type --name float --type Float
701       [[0,1317212791.58803,0.027924039],true]
702       > column_create --table Type --name string --type ShortText
703       [[0,1317212791.81654,0.040399047],true]
704       > column_create --table Type --name time --type Time
705       [[0,1317212792.05751,0.027354067],true]
706       > load --table Type
707       > [{"_key":"sample","number":12345,"float":42.195,"string":"GROONGA","time":1234567890.12}]
708       [[0,1317212792.28516,0.200775839],1]
709       > select --table Type
710       [[0,1317212792.68655,0.000199477],[[[1],[["_id","UInt32"],["_key","ShortText"],["time","Time"],["string","ShortText"],["number","Int32"],["float","Float"]],[1,"sample",1234567890.12,"GROONGA",12345,42.195]]]]
711
712   テーブル型
713       table_createで作成したテーブルを、カラムの型として使うことが出来ます。
714
715       また、output_col‐
716       umnsにおいて「.」を区切りとして、参照先のテーブルに存在するカラムを指定すると、指定したカラムの値を表示することができます。
717
718       ここでは、先のチュートリアルで作成したSiteテーブルに手を加え、どのサイトをリンクしているのかを保存してみましょう。
719
720       他のテーブルを参照するカラムにデータを入力する場合には、参照先のテーブルの_keyカラムの値を代入する必要があります。
721
722       Execution example:
723
724       > column_create --table Site --name link --type Site
725       [[0,1317212792.88872,0.060705006],true]
726       > load --table Site
727       > [{"_key":"http://example.org/","link":"http://example.net/"}]
728       [[0,1317212793.14984,0.200481934],1]
729       > select --table Site --output_columns _key,title,link._key,link.title --query title:@this
730       [[0,1317212793.55084,0.000485897],[[[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."]]]]
731
732       このように、linkカラムに他のサイトへの参照を保存することができました。また、参照先の_keyとtitleカラムの内容を表示することができました。
733
734   ベクターカラム
735       column_createコマンドでカラムを作成するとき、--flagsオプションでCOL‐
736       UMN_VEC‐
737       TORフラグを指定すると、複数の値を配列で格納できるカラムが作成されます。
738
739       テーブル型で配列を格納するカラムは、1対多の参照関係を表すのに有効です。
740
741       テーブル型のチュートリアルでは、Siteテーブルに手を加え、どのサイトをリンクしているのかを保存しました。しかし、通常は1つのサイトから多くのサイトにリンクが張られています。複数のリンク情報を格納するために、複数の参照関係を保存するカラムを作成してみましょう。
742
743       他のテーブルを参照するベクターカラムにデータを入力する場合には、参照先のテーブルの_keyカラムの値の「配列」を代入する必要があります。
744
745       Execution example:
746
747       > column_create --table Site --name links --flags COLUMN_VECTOR --type Site
748       [[0,1317212793.75262,0.049658904],true]
749       > load --table Site
750       > [{"_key":"http://example.org/","links":["http://example.net/","http://example.org/","http://example.com/"]}]
751       [[0,1317212794.00274,0.200473621],1]
752       > select --table Site --output_columns _key,title,links._key,links.title --query title:@this
753       [[0,1317212794.40349,0.000384272],[[[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."]]]]]
754
755       このように、複数の参照関係が保存できました。また、output_col‐
756       umnsによって、複数の参照先のカラム値も表示させることができました。
757
758   さまざまな検索条件の指定
759       groongaは、JavaScriptに似た文法での条件絞込や、計算した値を用いたソートを行うことができます。また、位置情報(緯度・経度)を用いた絞込・ソートを行うことができます。
760
761   JavaScriptに似た文法での絞込・全文検索
762       selectコマンドのfil‐
763       terパラメータは、queryパラメータと同様に、レコードの検索条件を指定します。fil‐
764       terパラメータとqueryパラメータが異なる点は、fil‐
765       terパラメータには、JavaScriptの式に似た文法で条件を指定する点です。
766
767       Execution example:
768
769       > select --table Site --filter "_id <= 1" --output_columns _id,_key
770       [[0,1317212733.77852,0.000333188],[[[1],[["_id","UInt32"],["_key","ShortText"]],[1,"http://example.org/"]]]]
771
772       ここで、filterパラメータには
773          _id <= 1
774
775       という条件を指定しています。この場合は_idの値が1以下のレコードが検索結果として得られます。
776
777       また、&& や || を使って、条件のAND・OR指定をすることもできます。
778
779       Execution example:
780
781       > select --table Site --filter "_id >= 4 && _id <= 6" --output_columns _id,_key
782       [[0,1317212733.97986,0.000297681],[[[3],[["_id","UInt32"],["_key","ShortText"]],[4,"http://example.net/afr"],[5,"http://example.org/aba"],[6,"http://example.com/rab"]]]]
783       > select --table Site --filter "_id <= 2 || _id >= 7" --output_columns _id,_key
784       [[0,1317212734.18118,0.000250524],[[[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"]]]]
785
786       queryパラメータとfil‐
787       terパラメータを同時に指定すると、両者の条件をともに満たすレコードが結果として返ります。
788
789   scorerを利用したソート
790       selectコマンドのscorerパラメータは、
791       全文検索を行った結果の各レコードに対して処理を行うためのパラメータです。
792
793       filterパラメータと同様に、
794       JavaScriptの式に似たな文法で様々な条件を指定することができます。
795
796       Execution example:
797
798       > select --table Site --filter "1" --scorer "_score = rand()" --output_columns _id,_key,_score --sortby _score
799       [[0,1317212734.38283,0.000354558],[[[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]]]]
800       > select --table Site --filter "1" --scorer "_score = rand()" --output_columns _id,_key,_score --sortby _score
801       [[0,1317212734.58497,0.000350529],[[[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]]]]
802
803       検索結果には、'_score'という名前の、全文検索のスコアが代入されている仮想的なカラムが付与されることをチュートリアル中ソートの項目で説明しました。
804
805       上記の実行例では、scorerパラメータに
806          _score = rand()
807
808       という条件を指定しています。ここでは、rand()という乱数を返す関数を用いて、全文検索のスコアを乱数で上書きしています。
809
810       sortbyパラメータには、
811          _score
812
813       を指定しています。これは、スコア順に昇順にソートすることを意味しています。
814
815       よって、上記のクエリは実行されるたびに検索結果の並び順がランダムに変わります。
816
817   位置情報を用いた絞込・ソート
818       groongaでは、位置情報(経緯度)を保存することができます。また、保存した経緯度を用いて絞込やソートができます。
819
820       位置情報を保存するためのカラムの型として、TokyoGeoPoint/WGS84Geo‐
821       Pointの2つの型があります。前者は日本測地系、後者は世界測地系(WGS84相当)の経緯度を保存します。
822
823       経緯度は以下のいずれかの形式の文字列として指定します。
824
825       · "[緯度のミリ秒]x[経度のミリ秒]"(例: "128452975x503157902")
826
827       · "[緯度のミリ秒],[経度のミリ秒]"(例: "128452975,503157902")
828
829       · "[緯度の小数表記の度数]x[経度の小数表記の度数]"(例:
830         "35.6813819x139.7660839")
831
832       · "[緯度の小数表記の度数],[経度の小数表記の度数]"(例:
833         "35.6813819,139.7660839")
834
835       ここでは、ためしに東京駅と新宿駅とついて、世界測地系での位置情報を保存してみましょう。東京駅は緯度が35度40分52.975秒、経度が139度45分57.902秒です。新宿駅は緯度が35度41分27.316秒、経度が139度42分0.929秒です。よって、ミリ秒表記の場合はそれぞれ"128452975x503157902"/"128487316x502920929"となります。度数表記の場合はそれぞれ"35.6813819x139.7660839"/"35.6909211x139.7002581"となります。ここではミリ秒表記で登録しましょう。
836
837       Execution example:
838
839       > column_create --table Site --name location --type WGS84GeoPoint
840       [[0,1317212734.78744,0.047997601],true]
841       > load --table Site
842       > [
843       >  {"_key":"http://example.org/","location":"128452975x503157902"}
844       >  {"_key":"http://example.net/","location":"128487316x502920929"},
845       > ]
846       [[0,1317212735.0361,0.801149613],2]
847       > select --table Site --query "_id:1 OR _id:2" --output_columns _key,location
848       [[0,1317212736.03775,0.000261897],[[[2],[["_key","ShortText"],["location","WGS84GeoPoint"]],["http://example.org/","128452975x503157902"],["http://example.net/","128487316x502920929"]]]]
849
850       scorerパラメータにおいて、                      /functions/geo_distance
851       関数を用いることにより、2点間の距離を計算することができます。
852
853       ここでは、秋葉原駅からの距離を表示させてみましょう。世界測地系では、秋葉原駅の位置は緯度が35度41分55.259秒、経度が139度46分27.188秒です。よって、geo_dis‐
854       tance関数に与える文字列は"128515259x503187188"となります。
855
856       Execution example:
857
858       > select --table Site --query "_id:1 OR _id:2" --output_columns _key,location,_score --scorer '_score = geo_distance(location, "128515259x503187188")'
859       [[0,1317212736.23918,0.000393211],[[[2],[["_key","ShortText"],["location","WGS84GeoPoint"],["_score","Int32"]],["http://example.org/","128452975x503157902",2054],["http://example.net/","128487316x502920929",6720]]]]
860
861       この結果を見ると、東京駅と秋葉原駅は2054m、秋葉原駅と新宿駅は6720m離れているようです。
862
863       geo_distance関数は、_scoreを通じてソートでも用いることができます。
864
865       Execution example:
866
867       > select --table Site --query "_id:1 OR _id:2" --output_columns _key,location,_score --scorer '_score = geo_distance(location, "128515259x503187188")' --sortby -_score
868       [[0,1317212736.44102,0.000345608],[[[2],[["_key","ShortText"],["location","WGS84GeoPoint"],["_score","Int32"]],["http://example.net/","128487316x502920929",6720],["http://example.org/","128452975x503157902",2054]]]]
869
870       「ある地点から何m以内に存在する」といった絞込も可能です。
871
872       filterパラメータにおいて、                     /functions/geo_in_circle
873       関数を用いることにより、2点間の距離が指定のm以下におさまるかどうかを判定することができます。
874
875       たとえば、秋葉原駅から5000m以内にあるレコードを検索してみましょう。
876
877       Execution example:
878
879       > select --table Site --output_columns _key,location --filter 'geo_in_circle(location, "128515259x503187188", 5000)'
880       [[0,1317212736.64335,0.000245378],[[[1],[["_key","ShortText"],["location","WGS84GeoPoint"]],["http://example.org/","128452975x503157902"]]]]
881
882       また、経緯度が指定の矩形領域内であるかどうかを判定する         ../func‐
883       tions/geo_in_rectangle 関数も存在します。
884
885   ドリルダウン
886       groongaでは、特定のカラム値で検索結果をグループ化することができます。これをドリルダウンと呼びます。
887
888       Siteテーブルに2つのカラムを追加します。TLDドメイン名を格納するdomainカラムと、国名を格納するcoun‐
889       tryカラムです。これらのカラムの型は、それぞれドメイン名を主キーとするSite‐
890       Domainテーブルと、国名を主キーとするSiteCountryテーブルとします。
891
892       Execution example:
893
894       > table_create --name SiteDomain --flags TABLE_HASH_KEY --key_type ShortText
895       [[0,1317212750.98228,0.098212593],true]
896       > table_create --name SiteCountry --flags TABLE_HASH_KEY --key_type ShortText
897       > column_create --table Site --name domain --flags COLUMN_SCALAR --type SiteDomain
898       [[0,1317212751.28095,0.256200943],true]
899       [[0,1317212751.53719,0.085740621],true]
900       > column_create --table Site --name country --flags COLUMN_SCALAR --type SiteCountry
901       [[0,1317212751.82329,0.064026147],true]
902       > load --table Site
903       > [
904       > {"_key":"http://example.org/","domain":".org","country":"japan"},
905       > {"_key":"http://example.net/","domain":".net","country":"brazil"},
906       > {"_key":"http://example.com/","domain":".com","country":"japan"},
907       > {"_key":"http://example.net/afr","domain":".net","country":"usa"},
908       > {"_key":"http://example.org/aba","domain":".org","country":"korea"},
909       > {"_key":"http://example.com/rab","domain":".com","country":"china"},
910       > {"_key":"http://example.net/atv","domain":".net","country":"china"},
911       > {"_key":"http://example.org/gat","domain":".org","country":"usa"},
912       > {"_key":"http://example.com/vdw","domain":".com","country":"japan"}
913       > ]
914       [[0,1317212752.0878,2.202801388],9]
915
916       domainカラムとcountryカラムでドリルダウンを行う例を以下に示します。
917
918       Execution example:
919
920       > select --table Site --limit 0 --drilldown domain
921       [[0,1317212754.4912,0.000250704],[[[9],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"],["location","WGS84GeoPoint"],["links","Site"],["link","Site"],["domain","SiteDomain"],["country","SiteCountry"]]],[[3],[["_key","ShortText"],["_nsubrecs","Int32"]],[".org",3],[".net",3],[".com",3]]]]
922
923       テーブル型を持つカラムに対してドリルダウンを行った場合、参照先のテーブルに存在するカラム値を取得することもできます。ドリルダウンを行ったテーブルには、_nsub‐
924       recsという仮想的なカラムが追加されます。このカラムには、グループ化されたレコード数が入ります。
925
926       Execution example:
927
928       > select --table Site --limit 0 --drilldown domain --drilldown_output_columns _id,_key,_nsubrecs
929       [[0,1317212754.69307,0.000359614],[[[9],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"],["location","WGS84GeoPoint"],["links","Site"],["link","Site"],["domain","SiteDomain"],["country","SiteCountry"]]],[[3],[["_id","UInt32"],["_key","ShortText"],["_nsubrecs","Int32"]],[1,".org",3],[2,".net",3],[3,".com",3]]]]
930
931       複数のカラムに対してドリルダウンを行うことができます。複数のカラムに対してドリルダウンを行う場合には、drill‐
932       downパラメータにカラム名をカンマ区切りで与えます。
933
934       Execution example:
935
936       > select --table Site --limit 0 --drilldown domain,country
937       [[0,1317212754.89542,0.000263258],[[[9],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"],["location","WGS84GeoPoint"],["links","Site"],["link","Site"],["domain","SiteDomain"],["country","SiteCountry"]]],[[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]]]]
938
939       ドリルダウン結果を並びかえることができます。例えば、_nsub‐
940       recsパラメータの降順で並び替えることができます。
941
942       Execution example:
943
944       > select --table Site --limit 0 --drilldown country --drilldown_sortby _nsubrecs
945       [[0,1317212755.09777,0.000284575],[[[9],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"],["location","WGS84GeoPoint"],["links","Site"],["link","Site"],["domain","SiteDomain"],["country","SiteCountry"]]],[[5],[["_key","ShortText"],["_nsubrecs","Int32"]],["brazil",1],["korea",1],["usa",2],["china",2],["japan",3]]]]
946
947       ドリルダウン結果は、デフォルトでは10件のみ表示されます。drilldown_off‐
948       setパラメータと、drilldown_limitパラメータによって、off‐
949       setとlimitを指定することができます。
950
951       Execution example:
952
953       > select --table Site --limit 0 --drilldown country --drilldown_sortby _nsubrecs --drilldown_limit 2 --drilldown_offset 2
954       [[0,1317212755.29988,0.000237191],[[[9],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"],["location","WGS84GeoPoint"],["links","Site"],["link","Site"],["domain","SiteDomain"],["country","SiteCountry"]]],[[5],[["_key","ShortText"],["_nsubrecs","Int32"]],["usa",2],["china",2]]]]
955
956       文字列型のカラムに対するドリルダウンは、他の型でのドリルダウンに比べて低速です。文字列でのドリルダウンを行いたい場合には、このチュートリアルのように、文字列型を主キーとするテーブルを別途作成し、そのテーブルを型とするカラムを作成します。
957
958   タグ検索・参照関係の逆引き
959       本チュートリアルで、groongaはカラム値として他のテーブルへの参照の配列を持つことができることを紹介いたしました。実は、テーブルへの参照の配列データを用いることによって、いわゆるタグ検索を行うことが可能となります。
960
961       タグ検索はgroongaの転置インデックスというデータ構造を用いて高速に行われます。
962
963   タグ検索
964       動画共有サイトの検索エンジンを作ることを想定します。1つの動画には、その動画の特徴を表す、複数の語句が付与されています。「ある語句が付与されている動画の一覧を取得する」検索を行いたいとします。
965
966       実際に、動画情報のテーブルを作成し、検索をしてみましょう。
967
968       動画の情報を保存する、Videoテーブルを作成します。Videoテーブルでは、動画のタイトルをtitleカラムに、動画のタグ情報をtagsカラムにTagテーブル型で複数格納しています。
969       タグの情報を保存する、Tagテーブルを作成します。Tagテーブルでは、タグ文字列を主キーに格納し、Videoテーブルのtagsカラムに対するインデックスをindex_tagsカラムに格納しています。
970
971       Execution example:
972
973       > table_create --name Video --flags TABLE_HASH_KEY --key_type UInt32
974       [[0,1317212832.70606,0.061331715],true]
975       > table_create --name Tag --flags TABLE_HASH_KEY --key_type ShortText
976       [[0,1317212832.968,0.039868236],true]
977       > column_create --table Video --name title --flags COLUMN_SCALAR --type ShortText
978       [[0,1317212833.20833,0.040494862],true]
979       > column_create --table Video --name tags --flags COLUMN_VECTOR --type Tag
980       [[0,1317212833.44939,0.051861409],true]
981       > column_create --table Tag --name index_tags --flags COLUMN_INDEX --type Video --source tags
982       [[0,1317212833.70185,0.092878953],true]
983       > load --table Video
984       > [
985       > {"_key":1,"title":"Soccer 2010","tags":["Sports","Soccer"]},
986       > {"_key":2,"title":"Zenigata Kinjirou","tags":["Variety","Money"]},
987       > {"_key":3,"title":"groonga Demo","tags":["IT","Server","groonga"]},
988       > {"_key":4,"title":"Moero!! Ultra Baseball","tags":["Sports","Baseball"]},
989       > {"_key":5,"title":"Hex Gone!","tags":["Variety","Quiz"]},
990       > {"_key":6,"title":"Pikonyan 1","tags":["Animation","Pikonyan"]},
991       > {"_key":7,"title":"Draw 8 Month","tags":["Animation","Raccoon"]},
992       > {"_key":8,"title":"K.O.","tags":["Animation","Music"]}
993       > ]
994       [[0,1317212833.99531,2.002850011],8]
995
996       インデックスカラムを作成すると、全文検索が高速に行えるようになります。インデックスカラムは、対象のカラムに保存されたデータに更新があったとき、自動的に更新されます。
997
998       「ある語句が付与されている動画の一覧を取得する」検索を行いましょう。
999
1000       Execution example:
1001
1002       > select --table Video --query tags:@Variety --output_columns _key,title
1003       [[0,1317212836.19894,0.000330108],[[[2],[["_key","UInt32"],["title","ShortText"]],[2,"Zenigata Kinjirou"],[5,"Hex Gone!"]]]]
1004       > select --table Video --query tags:@Sports --output_columns _key,title
1005       [[0,1317212836.39998,0.000316897],[[[2],[["_key","UInt32"],["title","ShortText"]],[1,"Soccer 2010"],[4,"Moero!! Ultra Baseball"]]]]
1006       > select --table Video --query tags:@Animation --output_columns _key,title
1007       [[0,1317212836.60111,0.000349157],[[[3],[["_key","UInt32"],["title","ShortText"]],[6,"Pikonyan 1"],[7,"Draw 8 Month"],[8,"K.O."]]]]
1008
1009       このように、「Variety」、「Sports」、「Anima‐
1010       tion」のようなタグで検索を行うことができました。
1011
1012   参照関係の逆引き
1013       groongaはテーブル間の参照関係の逆引きを高速に行うためのインデックスを付与することができます。タグ検索は、その1例にすぎません。
1014
1015       例えば、ソーシャルネットワーキングサイトにおける友人関係を逆引き検索することができます。
1016
1017       以下の例では、ユーザー情報を格納するUserテーブルを作成し、ユーザー名を格納するuser‐
1018       nameカラム、ユーザーの友人一覧を配列で格納するfriendsカラムとそのインデックスのindex_friendsカラムを追加しています。
1019
1020       Execution example:
1021
1022       > table_create --name User --flags TABLE_HASH_KEY --key_type ShortText
1023       [[0,1317212836.80268,0.048923839],true]
1024       > column_create --table User --name username --flags COLUMN_SCALAR --type ShortText
1025       [[0,1317212837.05226,0.040322616],true]
1026       > column_create --table User --name friends --flags COLUMN_VECTOR --type User
1027       [[0,1317212837.29306,0.039978793],true]
1028       > column_create --table User --name index_friends --flags COLUMN_INDEX --type User --source friends
1029       [[0,1317212837.53369,0.067271637],true]
1030       > load --table User
1031       > [
1032       > {"_key":"ken","username":"健作","friends":["taro","jiro","tomo","moritapo"]}
1033       > {"_key":"moritapo","username":"森田","friends":["ken","tomo"]}
1034       > {"_key":"taro","username":"ぐるんが太郎","friends":["jiro","tomo"]}
1035       > {"_key":"jiro","username":"ぐるんが次郎","friends":["taro","tomo"]}
1036       > {"_key":"tomo","username":"トモちゃん","friends":["ken","hana"]}
1037       > {"_key":"hana","username":"花子","friends":["ken","taro","jiro","moritapo","tomo"]}
1038       > ]
1039       [[0,1317212837.80152,1.602221355],6]
1040
1041       指定したユーザーを友人リストに入れているユーザーの一覧を表示してみましょう。
1042
1043       Execution example:
1044
1045       > select --table User --query friends:@tomo --output_columns _key,username
1046       [[0,1317212839.60442,0.000260617],[[[5],[["_key","ShortText"],["username","ShortText"]],["ken","健作"],["taro","ぐるんが太郎"],["jiro","ぐるんが次郎"],["moritapo","森田"],["hana","花子"]]]]
1047       > select --table User --query friends:@jiro --output_columns _key,username
1048       [[0,1317212839.80577,0.000253172],[[[3],[["_key","ShortText"],["username","ShortText"]],["ken","健作"],["taro","ぐるんが太郎"],["hana","花子"]]]]
1049
1050       さらに、ドリルダウンを使って、友人リストに入っている数の一覧を表示してみましょう。
1051
1052       Execution example:
1053
1054       > select --table User --limit 0 --drilldown friends
1055       [[0,1317212840.00717,0.000223187],[[[6],[["_id","UInt32"],["_key","ShortText"],["username","ShortText"],["index_friends","User"],["friends","User"]]],[[6],[["_key","ShortText"],["_nsubrecs","Int32"]],["taro",3],["jiro",3],["tomo",5],["moritapo",2],["ken",3],["hana",1]]]]
1056
1057       このように、テーブルの参照関係を逆にたどる検索ができました。
1058
1059   インデックス付きジオサーチ
1060       位置情報のカラムに対して、インデックスを付与することが出来ます。大量の位置情報レコードを検索する場合に、検索速度が速くなります。
1061
1062       Execution example:
1063
1064       > table_create --name GeoIndex --flags TABLE_PAT_KEY --key_type WGS84GeoPoint
1065       [[0,1317212840.20962,0.088534001],true]
1066       > column_create --table GeoIndex --name index_point --type Site --flags COLUMN_INDEX --source location
1067       [[0,1317212840.49869,0.093704431],true]
1068       > load --table Site
1069       > [
1070       >  {"_key":"http://example.org/","location":"128452975x503157902"},
1071       >  {"_key":"http://example.net/","location":"128487316x502920929"}
1072       > ]
1073       [[0,1317212840.79332,0.801438285],2]
1074       > select --table Site --filter 'geo_in_circle(location, "128515259x503187188", 5000)' --output_columns _key,location
1075       [[0,1317212841.79563,0.000626003],[[[1],[["_key","ShortText"],["location","WGS84GeoPoint"]],["http://example.org/","128452975x503157902"]]]]
1076
1077       同様に、位置情報レコードを用いてソートする場合に、ソート速度が速くなります。
1078
1079       Execution example:
1080
1081       > select --table Site --filter 'geo_in_circle(location, "128515259x503187188", 50000)' --output_columns _key,location,_score --sortby '-geo_distance(location, "128515259x503187188")' --scorer '_score = geo_distance(location, "128515259x503187188")'
1082       [[0,1317212841.99878,0.0011657],[[[2],[["_key","ShortText"],["location","WGS84GeoPoint"],["_score","Int32"]],["http://example.org/","128452975x503157902",2054],["http://example.net/","128487316x502920929",6720]]]]
1083
1084   match_columnsパラメータ
1085   複数のカラムを対象とした全文検索
1086       groongaでは、複数のカラムを対象とした全文検索を行うことができます。例えば、ブログのテーブルで、タイトルと内容とがそれぞれ別のカラムに入ったものがあるとしましょう。「タイトルもしくは内容に特定の単語を含む」検索を行いたいとします。
1087
1088       この場合、2つのインデックス作成方式があります。1つは、それぞれのカラムに1つずつインデックスを付与する方式です。もう1つは、複数のカラムに対して1つのインデックスを付与する方式です。groongaでは、どちらの形式のインデックスが存在している場合でも、同一の記法で全文検索を行うことができます。
1089
1090   カラムごとにインデックスを付与する場合
1091       Blog1テーブルを作り、タイトル文字列のtitleカラム、本文のmes‐
1092       sageカラムを追加しています。
1093       インデックス用のIndexBlog1テーブルも作り、titleカラムのインデックス用にindex_titleカラム、mes‐
1094       sageカラムのインデック用にindex_mes‐
1095       sageカラムと、それぞれ1カラムごとに1つずつ追加しています。
1096
1097       Execution example:
1098
1099       > table_create --name Blog1 --flags TABLE_HASH_KEY --key_type ShortText
1100       [[0,1317212795.41036,0.047939793],true]
1101       > column_create --table Blog1 --name title --flags COLUMN_SCALAR --type ShortText
1102       [[0,1317212795.65884,0.040658195],true]
1103       > column_create --table Blog1 --name message --flags COLUMN_SCALAR --type ShortText
1104       [[0,1317212795.89978,0.029458384],true]
1105       > table_create --name IndexBlog1 --flags TABLE_PAT_KEY|KEY_NORMALIZE --key_type ShortText --default_tokenizer TokenBigram
1106       [[0,1317212796.12974,0.183567683],true]
1107       > column_create --table IndexBlog1 --name index_title --flags COLUMN_INDEX|WITH_POSITION --type Blog1 --source title
1108       [[0,1317212796.51381,0.092148792],true]
1109       > column_create --table IndexBlog1 --name index_message --flags COLUMN_INDEX|WITH_POSITION --type Blog1 --source message
1110       [[0,1317212796.80646,0.088690675],true]
1111       > load --table Blog1
1112       > [
1113       > {"_key":"grn1","title":"groonga test","message":"groonga message"},
1114       > {"_key":"grn2","title":"baseball result","message":"rakutan eggs 4 - 4 groonga moritars"},
1115       > {"_key":"grn3","title":"groonga message","message":"none"}
1116       > ]
1117       [[0,1317212797.09575,1.001254761],3]
1118
1119       match_col‐
1120       umnsオプションで、検索対象のカラムを複数指定することが出来ます。検索する文字列はqueryオプションで指定します。これを使うことで、タイトルと本文を全文検索することができます。
1121
1122       実際に検索してみましょう。
1123
1124       Execution example:
1125
1126       > select --table Blog1 --match_columns title||message --query groonga
1127       [[0,1317212798.29761,0.000365318],[[[3],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"],["message","ShortText"]],[1,"grn1","groonga test","groonga message"],[3,"grn3","groonga message","none"],[2,"grn2","baseball result","rakutan eggs 4 - 4 groonga moritars"]]]]
1128       > select --table Blog1 --match_columns title||message --query message
1129       [[0,1317212798.49954,0.000310648],[[[2],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"],["message","ShortText"]],[3,"grn3","groonga message","none"],[1,"grn1","groonga test","groonga message"]]]]
1130       > select --table Blog1 --match_columns title --query message
1131       [[0,1317212798.70102,0.000314581],[[[1],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"],["message","ShortText"]],[3,"grn3","groonga message","none"]]]]
1132
1133   複数のカラムにまたがったインデックスを付与する場合
1134       内容は上の例とほぼ同じですが、titleとmes‐
1135       sageの2つのカラムに対するインデックスが共通になっており、インデックスカラムが1つしかありません。
1136
1137       共通のインデックスを用いても、titleカラムのみでの検索、mes‐
1138       sageカラムのみでの検索、titleもしくはmes‐
1139       sageカラムでの検索、全ての検索を行うことができます。
1140
1141       Execution example:
1142
1143       > table_create --name Blog2 --flags TABLE_HASH_KEY --key_type ShortText
1144       [[0,1317212798.90253,0.052986511],true]
1145       > column_create --table Blog2 --name title --flags COLUMN_SCALAR --type ShortText
1146       [[0,1317212799.156,0.028355347],true]
1147       > column_create --table Blog2 --name message --flags COLUMN_SCALAR --type ShortText
1148       [[0,1317212799.38486,0.040142104],true]
1149       > table_create --name IndexBlog2 --flags TABLE_PAT_KEY|KEY_NORMALIZE --key_type ShortText --default_tokenizer TokenBigram
1150       [[0,1317212799.62539,0.039673533],true]
1151       > column_create --table IndexBlog2 --name index_blog --flags COLUMN_INDEX|WITH_POSITION|WITH_SECTION --type Blog2 --source title,message
1152       [[0,1317212799.86551,0.079790187],true]
1153       > load --table Blog2
1154       > [
1155       > {"_key":"grn1","title":"groonga test","message":"groonga message"},
1156       > {"_key":"grn2","title":"baseball result","message":"rakutan eggs 4 - 4 groonga moritars"},
1157       > {"_key":"grn3","title":"groonga message","message":"none"}
1158       > ]
1159       [[0,1317212800.14589,1.001367315],3]
1160
1161       実際に検索してみましょう。結果は上の例と同じになります。
1162
1163       Execution example:
1164
1165       > select --table Blog2 --match_columns title||message --query groonga
1166       [[0,1317212801.34801,0.000328232],[[[3],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"],["message","ShortText"]],[1,"grn1","groonga test","groonga message"],[2,"grn2","baseball result","rakutan eggs 4 - 4 groonga moritars"],[3,"grn3","groonga message","none"]]]]
1167       > select --table Blog2 --match_columns title||message --query message
1168       [[0,1317212801.54962,0.000320935],[[[2],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"],["message","ShortText"]],[1,"grn1","groonga test","groonga message"],[3,"grn3","groonga message","none"]]]]
1169       > select --table Blog2 --match_columns title --query message
1170       [[0,1317212801.75107,0.000323124],[[[1],[["_id","UInt32"],["_key","ShortText"],["title","ShortText"],["message","ShortText"]],[3,"grn3","groonga message","none"]]]]
1171
1172   インデックス名を指定した全文検索
1173       執筆中です。
1174
1175   インデックスの重み
1176       執筆中です。
1177
1178   パトリシア木による前方一致検索
1179       groongaのテーブルは、テーブル作成時にパトリシア木オプションを指定すると、前方一致検索を行うことができます。また、追加のオプションを指定することにより、主キーの後方一致検索をも行うことができます。
1180
1181   主キーによる前方一致検索
1182       table_createコマンドのflagsオプションにTA‐
1183       BLE_PAT_KEYを指定することで、主キーによる前方一致検索ができるようになります。
1184
1185       Execution example:
1186
1187       > table_create --name PatPrefix --flags TABLE_PAT_KEY --key_type ShortText
1188       [[0,1317212719.34619,0.047490604],true]
1189       > load --table PatPrefix
1190       > [
1191       > {"_key":"ひろゆき"},
1192       > {"_key":"まろゆき"},
1193       > {"_key":"ひろあき"}
1194       > ]
1195       [[0,1317212719.59456,1.001406593],3]
1196       > select --table PatPrefix --query _key:@ひろ
1197       [[0,1317212720.79648,0.00031203],[[[2],[["_id","UInt32"],["_key","ShortText"]],[3,"ひろあき"],[1,"ひろゆき"]]]]
1198
1199   主キーによる後方一致検索
1200       table_createコマンドのflagsオプションにTA‐
1201       BLE_PAT_KEYとKEY_WITH_SISを指定することで、主キーによる前方一致検索・後方一致検索の両方が可能となります。
1202
1203       KEY_WITH_SISフラグを付与すると、データを追加する際に後方一致用のレコードも追加されてしまいます。そのため、単純に検索すると、元のレコードに加えて自動的に追加されたレコードまでヒットしてしまいます。元のレコードのみ検索するために、一工夫必要になります。
1204
1205       例えば、元のレコードと自動的に追加されたレコードとの区別をつけるために、元のレコードであることを示すorig‐
1206       inalカラムを追加して、検索時にはoriginalカラムが                   true
1207       も検索条件に加えます。
1208
1209       Execution example:
1210
1211       > table_create --name PatSuffix --flags TABLE_PAT_KEY|KEY_WITH_SIS --key_type ShortText
1212       [[0,1317212720.99778,0.0531648179999999],true]
1213       > column_create --table PatSuffix --name original --type Bool
1214       [[0,1317212721.25163,0.099479727],true]
1215       > load --table PatSuffix
1216       > [
1217       > {"_key":"ひろゆき","original":true},
1218       > {"_key":"まろゆき","original":true},
1219       > {"_key":"ひろあき","original":true}
1220       > ]
1221       [[0,1317212721.55167,1.001449341],3]
1222       > select --table PatSuffix --query _key:@ゆき
1223       [[0,1317212722.75369,0.000313623],[[[4],[["_id","UInt32"],["_key","ShortText"],["original","Bool"]],[1,"ひろゆき",true],[5,"まろゆき",true],[3,"ゆき",false],[2,"ろゆき",false]]]]
1224       > select --table PatSuffix --query "_key:@ゆき original:true"
1225       [[0,1317212722.95502,0.00032577],[[[2],[["_id","UInt32"],["_key","ShortText"],["original","Bool"]],[1,"ひろゆき",true],[5,"まろゆき",true]]]]
1226
1227   全文検索の語彙表に対する追加情報
1228       groongaでは、全文検索に用いるための語意表がテーブルとして扱えます。よって、語彙ごとに複数の情報を保持することができます。例えば、語彙の出現数や検索ストップワードのフラグ、単語の重要度などを保持することができます。
1229
1230       この項目については、現在執筆中です。
1231
1232   マイクロブログ検索システムの作成
1233       これまで学んだgroongaの機能を用いて、マイクロブログの検索システムを作成してみましょう。マイクロブログとは、Twit‐
1234       terのような短いメッセージを投稿するブログです。
1235
1236   テーブルの作成
1237       まずは、テーブルを作成します。
1238
1239       table_create --name Users --flags TABLE_HASH_KEY --key_type ShortText
1240       table_create --name Comments --flags TABLE_HASH_KEY --key_type ShortText
1241       table_create --name HashTags --flags TABLE_HASH_KEY --key_type ShortText
1242       table_create --name Bigram --flags TABLE_PAT_KEY|KEY_NORMALIZE --key_type ShortText --default_tokenizer TokenBigram
1243
1244       column_create --table Users --name name --flags COLUMN_SCALAR --type ShortText
1245       column_create --table Users --name follower --flags COLUMN_VECTOR --type Users
1246       column_create --table Users --name favorites --flags COLUMN_VECTOR --type Comments
1247       column_create --table Users --name location --flags COLUMN_SCALAR --type WGS84GeoPoint
1248       column_create --table Users --name location_str --flags COLUMN_SCALAR --type ShortText
1249       column_create --table Users --name description --flags COLUMN_SCALAR --type ShortText
1250       column_create --table Users --name followee --flags COLUMN_INDEX --type Users --source follower
1251
1252       column_create --table Comments --name comment --flags COLUMN_SCALAR --type ShortText
1253       column_create --table Comments --name last_modified --flags COLUMN_SCALAR --type Time
1254       column_create --table Comments --name replied_to --flags COLUMN_SCALAR --type Comments
1255       column_create --table Comments --name replied_users --flags COLUMN_VECTOR --type Users
1256       column_create --table Comments --name hash_tags --flags COLUMN_VECTOR --type HashTags
1257       column_create --table Comments --name location --flags COLUMN_SCALAR --type WGS84GeoPoint
1258       column_create --table Comments --name posted_by --flags COLUMN_SCALAR --type Users
1259       column_create --table Comments --name favorited_by --flags COLUMN_INDEX --type Users --source favorites
1260
1261       column_create --table HashTags --name hash_index --flags COLUMN_INDEX --type Comments --source hash_tags
1262
1263       column_create --table Bigram --name users_index --flags COLUMN_INDEX|WITH_POSITION|WITH_SECTION --type Users --source name,location_str,description
1264       column_create --table Bigram --name comment_index --flags COLUMN_INDEX|WITH_POSITION --type Comments --source comment
1265
1266   Usersテーブル
1267       ユーザーの名前や自己紹介文、フォローしているユーザー一覧など、ユーザー情報を格納するためのテーブルです。
1268
1269       _key   ユーザーID
1270
1271       name   ユーザー名
1272
1273       follower
1274              フォローしているユーザーの一覧
1275
1276       favorites
1277              お気に入りのコメント一覧
1278
1279       location
1280              ユーザーの現在地(緯度経度座標)
1281
1282       location_str
1283              ユーザーの現在地(文字列)
1284
1285       description
1286              ユーザーの自己紹介
1287
1288       followee
1289              Usersテーブルのfollowerカラムに対するインデックス。
1290              このインデックスを作ることで、あるユーザーをフォローしているユーザーを検索できるようになります。
1291
1292   Commentsテーブル
1293       コメント内容や投稿日時、返信先情報など、コメントに関する内容を格納するテーブルです。
1294
1295       _key   コメントID
1296
1297       comment
1298              コメント内容
1299
1300       last_modified
1301              投稿日時
1302
1303       replied_to
1304              返信元のコメント内容
1305
1306       replied_users
1307              返信先のユーザーの一覧
1308
1309       hash_tags
1310              コメントのハッシュタグの一覧
1311
1312       location
1313              投稿場所(緯度経度座標のため)
1314
1315       posted_by
1316              コメントを書いたユーザー
1317
1318       favorited_by
1319              Usersテーブルのfavoritesカラムに対するインデックス。
1320              このインデックスを作ることで、指定したコメントを誰がお気に入りに入れているのかを検索できるようになります。
1321
1322   HashTagsテーブル
1323       コメントのハッシュタグを一覧で保存するためのテーブルです。
1324
1325       _key   ハッシュタグ
1326
1327       hash_index
1328              「Comments.hash_tags」のインデックス。
1329              このインデックスを作ることで、指定したハッシュタグのついているコメントの一覧を出すことが出来るようになります。
1330
1331   Bigramテーブル
1332       ユーザー情報・コメントで全文検索が出来るようにするためのインデックスを格納するテーブルです。
1333
1334       _key   単語
1335
1336       users_index
1337              ユーザー情報のインデックス。
1338              このカラムは、ユーザー名「Users.name」、現在地「Users.loca‐
1339              tion_str」、自己紹介文「Users.descrip‐
1340              tion」のインデックスになっています。
1341
1342       comment_index
1343              コメント内容「Comments.comment」のインデックス
1344
1345   データのロード
1346       つづいて、テスト用データをロードします。
1347
1348       load --table Users
1349       [
1350         {
1351           "_key": "daijiro",
1352           "name": "hsiomaneki",
1353           "follower": ["tasukuchan"],
1354           "favorites": [],
1355           "location": "127678039x502643091",
1356           "location_str": "神奈川県",
1357           "description": "groonga developer"
1358         },
1359         {
1360           "_key": "tasukuchan",
1361           "name": "グニャラくん",
1362           "follower": ["daijiro","OffGao"],
1363           "favorites": ["daijiro:1","OffGao:1"],
1364           "location": "128423343x502929252",
1365           "location_str": "東京都渋谷区",
1366           "description": "エロいおっさん"
1367         },
1368         {
1369           "_key": "OffGao",
1370           "name": "OffGao",
1371           "follower": ["tasukuchan","daijiro"],
1372           "favorites": ["tasukuchan:1","daijiro:1"],
1373           "location": "128544408x502801502",
1374           "location_str": "東京都中野区",
1375           "description": "がおがお"
1376         }
1377       ]
1378
1379       load --table Comments
1380       [
1381         {
1382           "_key": "daijiro:1",
1383           "comment": "マイクロブログ作ってみました(甘栗むいちゃいました的な感じで)。",
1384           "last_modified": "2010/03/17 12:05:00",
1385           "posted_by": "daijiro",
1386         },
1387         {
1388           "_key": "tasukuchan:1",
1389           "comment": "初の書き込み。テストテスト。",
1390           "last_modified": "2010/03/17 12:00:00",
1391           "posted_by": "tasukuchan",
1392         },
1393         {
1394           "_key": "daijiro:2",
1395           "comment": "@tasukuchan ようこそ!!!",
1396           "last_modified": "2010/03/17 12:05:00",
1397           "replied_to": "tasukuchan:1",
1398           "replied_users": ["tasukuchan"],
1399           "posted_by": "daijiro",
1400         },
1401         {
1402           "_key": "tasukuchan:2",
1403           "comment": "@daijiro ありがとう!",
1404           "last_modified": "2010/03/17 13:00:00",
1405           "replied_to": "daijiro:2",
1406           "replied_users": ["daijiro"],
1407           "posted_by": "tasukuchan",
1408         },
1409         {
1410           "_key": "tasukuchan:3",
1411           "comment": "groongaなう #groonga",
1412           "last_modified": "2010/03/17 14:00:00",
1413           "hash_tags": ["groonga"],
1414           "location": "127972422x503117107",
1415           "posted_by": "tasukuchan",
1416         },
1417         {
1418           "_key": "tasukuchan:4",
1419           "comment": "groonga開発合宿のため羽田空港に来ました! #groonga #travel",
1420           "last_modified": "2010/03/17 14:05:00",
1421           "hash_tags": ["groonga", "travel"],
1422           "location": "127975798x502919856",
1423           "posted_by": "tasukuchan",
1424         },
1425         {
1426           "_key": "OffGao:1",
1427           "comment": "@daijiro @tasukuchan 登録してみましたよー!",
1428           "last_modified": "2010/03/17 15:00:00",
1429           "replied_users": ["daijiro", "tasukuchan"],
1430           "location": "128551935x502796433",
1431           "posted_by": "OffGao",
1432         }
1433         {
1434           "_key": "OffGao:2",
1435           "comment": "中野ブロードウェイなうなう",
1436           "last_modified": "2010/03/17 15:05:00",
1437           "location": "128551935x502796434",
1438           "posted_by": "OffGao",
1439         }
1440       ]
1441
1442       Usersテーブルのfollowerカラムとfavoritesカラム、そしてCom‐
1443       mentsテーブルのreplied_usersカラムは、ベクターカラムです。そのため、これらのカラムは配列で値を指定します。
1444
1445       Usersテーブルのlocationカラムと、Commentsテーブルのloca‐
1446       tionカラムは、Geo‐
1447       Point型です。この型での値の指定は、"[緯度]x[経度]"と記述して指定します。
1448
1449       Commentsテーブルのlast_modi‐
1450       fiedカラムは、Time型です。この型での値の指定方法は、マイクロ秒数の値を直接指定する方法のほかに、文字列で指定する方法もあります。"年/月/日
1451       時:分:秒"というフォーマットで記述することで、データロードの際に文字列からキャストされ、マイクロ秒数の値が格納されます。
1452
1453   検索
1454       それでは、実際に検索をしてみましょう。
1455
1456   キーワードでユーザー検索
1457       ここでは、                                                match_columns
1458       で扱った、複数カラムを対象とした検索を行います。
1459       指定された文字列で、ユーザー名・現在地・自己紹介文を対象に検索をします。
1460
1461       Execution example:
1462
1463       > select --table Users --match_columns name,location_str,description --query 東京 --output_columns _key,name
1464       [[0,1317212781.80175,0.000302755],[[[2],[["_key","ShortText"],["name","ShortText"]],["tasukuchan","グニャラくん"],["OffGao","OffGao"]]]]
1465
1466       「東京」をキーワードにユーザー検索した結果、東京都に住んでいる「グニャラくん」と「Off‐
1467       Gao」がヒットしました。
1468
1469   GeoPointでユーザー検索
1470       ここでは、     search      で扱った、GeoPoint型のカラムで検索をします。
1471       以下の例では、指定された位置から5000m以内にいるユーザーを検索しています。
1472
1473       Execution example:
1474
1475       > select --table Users --filter 'geo_in_circle(location,"128484216x502919856",5000)' --output_columns _key,name
1476       [[0,1317212782.00321,0.000241271],[[[2],[["_key","ShortText"],["name","ShortText"]],["tasukuchan","グニャラくん"],["OffGao","OffGao"]]]]
1477
1478       新宿駅から5km以内にすんでいるユーザーを検索したところ、「グニャラくん」と「Off‐
1479       Gao」がヒットしました。
1480
1481   あるユーザーをフォローしているユーザーの検索
1482       ここでは、          index          で扱った、参照関係の逆引きをします。
1483       以下の例では、Usersテーブルのfol‐
1484       lowerカラムにあるフォローリストを逆引きします。
1485
1486       Execution example:
1487
1488       > select --table Users --query follower:@tasukuchan --output_columns _key,name
1489       [[0,1317212782.20472,0.000231885],[[[2],[["_key","ShortText"],["name","ShortText"]],["daijiro","hsiomaneki"],["OffGao","OffGao"]]]]
1490
1491       「グニャラくん」をフォローしている「hsiomaneki」と「Off‐
1492       Gao」がヒットしました。
1493
1494   GeoPointでコメント検索
1495       ある範囲内で書かれたコメントを検索します。       また、       drilldown
1496       で扱ったドリルダウンも行います。検索結果をハッシュタグとユーザーでドリルダウンし、ユーザー別・ハッシュタグ別のカウントを出します。
1497
1498       Execution example:
1499
1500       > select --table Comments --filter 'geo_in_circle(location,"127975798x502919856",20000)' --output_columns posted_by.name,comment --drilldown hash_tags,posted_by
1501       [[0,1317212782.40617,0.000451828],[[[4],[["posted_by.name","ShortText"],["comment","ShortText"]],["OffGao","@daijiro @tasukuchan 登録してみましたよー!"],["グニャラくん","groongaなう #groonga"],["グニャラくん","groonga開発合宿のため羽田空港に来ました! #groonga #travel"],["OffGao","中野ブロードウェイなうなう"]],[[2],[["_key","ShortText"],["_nsubrecs","Int32"]],["groonga",2],["travel",1]],[[2],[["_key","ShortText"],["_nsubrecs","Int32"]],["OffGao",2],["tasukuchan",2]]]]
1502
1503       範囲を広く指定したため、位置情報のあるすべてのコメントがヒットしました。そして、ヒットしたコメントからドリルダウンされた結果も返ってきており、ハッシュタグは「#groonga」が2つに「#travel」が1つ、投稿者は「グニャラくん」「Off‐
1504       Gao」がそれぞれ2件ずつであることがわかります。
1505
1506   キーワードでコメント検索
1507       あるキーワードを含むコメントを検索します。        さらに、       search
1508       で扱った、スコア値_scoreも出してみましょう。
1509
1510       Execution example:
1511
1512       > select --table Comments --query comment:@なう --output_columns comment,_score
1513       [[0,1317212782.60919,0.000239996],[[[2],[["comment","ShortText"],["_score","Int32"]],["groongaなう #groonga",1],["中野ブロードウェイなうなう",2]]]]
1514
1515       「なう」をキーワードにコメント検索した結果、2件のコメントがヒットしました。また、_scoreの値も返ってきており、「なう」の数が出力されていることが確認できます。
1516
1517   GeoPointとキーワードでコメント検索
1518       今度は、キーワードとGeo‐
1519       Pointの両方を条件に検索をしてみます。--queryと--fil‐
1520       terの両方を使用した場合、両方の条件に一致するレコードがヒットします。
1521
1522       Execution example:
1523
1524       > select --table Comments --query comment:@羽田 --filter 'geo_in_circle(location,"127975798x502919856",20000)' --output_columns posted_by.name,comment --drilldown hash_tags,posted_by
1525       [[0,1317212782.81082,0.000427163],[[[1],[["posted_by.name","ShortText"],["comment","ShortText"]],["グニャラくん","groonga開発合宿のため羽田空港に来ました! #groonga #travel"]],[[2],[["_key","ShortText"],["_nsubrecs","Int32"]],["groonga",1],["travel",1]],[[1],[["_key","ShortText"],["_nsubrecs","Int32"]],["tasukuchan",1]]]]
1526
1527       両方の条件を満たすコメントが1件ヒットしました。また、ドリルダウンの結果も返ってきており、「グニャラくん」のコメント1件であることがわかります。
1528
1529   ハッシュタグでコメント検索
1530       あるハッシュタグのついているコメントを検索します。    これも、    index
1531       で扱った、参照関係の逆引きを使います。
1532
1533       Execution example:
1534
1535       > select --table Comments --query hash_tags:@groonga --output_columns posted_by.name,comment --drilldown posted_by
1536       [[0,1317212783.01379,0.000311974],[[[2],[["posted_by.name","ShortText"],["comment","ShortText"]],["グニャラくん","groongaなう #groonga"],["グニャラくん","groonga開発合宿のため羽田空港に来ました! #groonga #travel"]],[[1],[["_key","ShortText"],["_nsubrecs","Int32"]],["tasukuchan",2]]]]
1537
1538       #groongaタグの付いている2件のコメントがヒットしました。また、投稿者のドリルダウンも返ってきており、2件とも「グニャラくん」のものであることがわかります。
1539
1540   ユーザーIDでコメント検索
1541       あるユーザーが投稿したコメントを検索します。
1542
1543       Execution example:
1544
1545       > select --table Comments --query posted_by:tasukuchan --output_columns comment --drilldown hash_tags
1546       [[0,1317212783.21601,0.000313114],[[[4],[["comment","ShortText"]],["初の書き込み。テストテスト。"],["@daijiro ありがとう!"],["groongaなう #groonga"],["groonga開発合宿のため羽田空港に来ました! #groonga #travel"]],[[2],[["_key","ShortText"],["_nsubrecs","Int32"]],["groonga",2],["travel",1]]]]
1547
1548       「グニャラくん」が書き込んだ4件のコメントがヒットしました。また、ハッシュタグでドリルダウンした結果も返ってきており、ハッシュタグは「#groonga」が2つに「#travel」が1つあることがわかります。
1549
1550   ユーザーのお気に入りコメントを検索
1551       あるユーザーがお気に入りに入れているコメントを検索します。
1552
1553       Execution example:
1554
1555       > select --table Users --query _key:tasukuchan --output_columns favorites.posted_by,favorites.comment
1556       [[0,1317212783.41809,0.000257979],[[[1],[["favorites.posted_by","Users"],["favorites.comment","ShortText"]],[["daijiro","OffGao"],["マイクロブログ作ってみました(甘栗むいちゃいました的な感じで)。","@daijiro @tasukuchan 登録してみましたよー!"]]]]]
1557
1558       「グニャラくん」がお気に入りに入れている2件のコメントがヒットしました。
1559
1560   投稿時間でコメント検索
1561       コメントの投稿時間で検索をします。Time型については                 data
1562       で扱っています。
1563       この例では、指定した時間よりも前に投稿されているコメントを検索します。
1564
1565       Execution example:
1566
1567       > select Comments --filter 'last_modified<=1268802000' --output_columns posted_by.name,comment,last_modified --drilldown hash_tags,posted_by
1568       [[0,1317212783.61997,0.000426254],[[[5],[["posted_by.name","ShortText"],["comment","ShortText"],["last_modified","Time"]],["hsiomaneki","マイクロブログ作ってみました(甘栗むいちゃいました的な感じで)。",1268795100.0],["グニャラくん","初の書き込み。テストテスト。",1268794800.0],["hsiomaneki","@tasukuchan ようこそ!!!",1268795100.0],["グニャラくん","@daijiro ありがとう!",1268798400.0],["グニャラくん","groongaなう #groonga",1268802000.0]],[[1],[["_key","ShortText"],["_nsubrecs","Int32"]],["groonga",1]],[[2],[["_key","ShortText"],["_nsubrecs","Int32"]],["daijiro",2],["tasukuchan",3]]]]
1569
1570       2010/03/17
1571       14:00:00以前に書かれたコメント5件がヒットしました。また、ドリルダウンの結果も返ってきており、「hsiomaneki」が2件、「グニャラくん」が3件ヒットしていることがわかります。
1572
1573   クエリ拡張
1574       groongaでは、          /commands/select          コマンドにquery_expan‐
1575       sionパラメータを指定することによって、ユーザが指定した検索文字列を適宜拡張することが可能です。
1576
1577       たとえば、ユーザが'シークヮーサー'という文字列で検索した場合に、'シークヮーサー
1578       OR
1579       シークァーサー'で検索した場合と同一の結果を返すことによって、本来ユーザが必要とする結果をよりもれなく検索できるようになります。
1580
1581   準備
1582       クエリ拡張機能を使用するためには、検索対象となる文書を格納するテーブル(ここでは文書テーブルと呼びます)以外に、ユーザの指定した検索文字列を置換するためのテーブル(ここでは置換テーブルと呼びます)を準備します。置換テーブルでは、その主キーが置換前の文字列となり、文字列型(Short‐
1583       Text)のカラムの値が置換後の文字列となります。
1584
1585       実際に文書テーブルと置換テーブルを作成してみましょう。
1586
1587       Execution example:
1588
1589       > table_create Doc TABLE_PAT_KEY ShortText
1590       [[0,1317212801.95257,0.054058921],true]
1591       > column_create Doc body COLUMN_SCALAR ShortText
1592       [[0,1317212802.2071,0.040301713],true]
1593       > table_create Term TABLE_PAT_KEY|KEY_NORMALIZE ShortText --default_tokenizer TokenBigram
1594       [[0,1317212802.44812,0.027340933],true]
1595       > column_create Term Doc_body COLUMN_INDEX|WITH_POSITION Doc body
1596       [[0,1317212802.676,0.079743674],true]
1597       > table_create Synonym TABLE_PAT_KEY ShortText
1598       [[0,1317212802.95629,0.03656858],true]
1599       > column_create Synonym body COLUMN_SCALAR ShortText
1600       [[0,1317212803.19316,0.040515932],true]
1601       > load --table Doc
1602       > [
1603       > {"_key": "001", "body": "すっぱいブドウと甘いシークァーサー"},
1604       > {"_key": "002", "body": "シークヮーサージュースとゴーヤチャンプル"},
1605       > ]
1606       [[0,1317212803.43422,0.80056314],2]
1607       > load --table Synonym
1608       > [
1609       > {"_key": "シークァーサー", "body": "(シークァーサー OR シークヮーサー)"},
1610       > {"_key": "シークヮーサー", "body": "(シークァーサー OR シークヮーサー)"},
1611       > ]
1612       [[0,1317212804.43524,0.801037492],2]
1613
1614       この例では、ユーザが"シークァーサー"と入力しても、"シークヮーサー"と入力しても、それぞれの異なる表記の文書をもれなく検索するための置換テーブルを作成しています。
1615
1616   検索
1617       それでは実際に、準備した置換テーブルを使ってみましょう。まずは、query_expan‐
1618       sionパラメータを指定せずにselectコマンドを使って検索してみます。
1619
1620       Execution example:
1621
1622       > select Doc --match_columns body --query "シークァーサー"
1623       [[0,1317212805.4371,0.000567851],[[[1],[["_id","UInt32"],["_key","ShortText"],["body","ShortText"]],[1,"001","すっぱいブドウと甘いシークァーサー"]]]]
1624       > select Doc --match_columns body --query "シークヮーサー"
1625       [[0,1317212805.63859,0.000387831],[[[1],[["_id","UInt32"],["_key","ShortText"],["body","ShortText"]],[2,"002","シークヮーサージュースとゴーヤチャンプル"]]]]
1626
1627       指定された文字列に完全に一致するレコードのみがそれぞれヒットします。次に、query_expan‐
1628       sionパラメータに、準備したSyn‐
1629       onymテーブルのbodyカラムを指定してみましょう。
1630
1631       Execution example:
1632
1633       > select Doc --match_columns body --query "シークァーサー" --query_expansion Synonym.body
1634       [[0,1317212805.84016,0.000441852],[[[2],[["_id","UInt32"],["_key","ShortText"],["body","ShortText"]],[1,"001","すっぱいブドウと甘いシークァーサー"],[2,"002","シークヮーサージュースとゴーヤチャンプル"]]]]
1635       > select Doc --match_columns body --query "シークヮーサー" --query_expansion Synonym.body
1636       [[0,1317212806.04176,0.000580261],[[[2],[["_id","UInt32"],["_key","ShortText"],["body","ShortText"]],[1,"001","すっぱいブドウと甘いシークァーサー"],[2,"002","シークヮーサージュースとゴーヤチャンプル"]]]]
1637
1638       どちらのクエリ文字列も、"(シークァーサー                             OR
1639       シークヮーサー)"という文字列に置換されてから検索されるため、表記の揺れを吸収して検索できるようになりました。
1640

SUGGEST

1642       Note   The  suggest  feature specification isn't stable. The specifica‐
1643              tion may be changed.
1644
1645       Groonga has the suggest feature. This section describes how to  use  it
1646       and how it works.
1647
1648   Introduction
1649       The suggest feature in groonga provides the following features:
1650
1651       · Completion
1652
1653       · Correction
1654
1655       · Suggestion
1656
1657   Completion
1658       Completion helps user input. If user inputs a partial word, groonga can
1659       return complete words from registered words.
1660
1661       For example, there are registered words:
1662
1663       · "groonga"
1664
1665       · "complete"
1666
1667       · "correction"
1668
1669       · "suggest"
1670
1671       An user inputs "co" and groonga  returns  "complete"  and  "correction"
1672       because they starts with "co".
1673
1674       An  user  inputs  "sug" and groonga returns "suggest" because "suggest"
1675       starts with "sug".
1676
1677       An user inputs "ab" and groonga returns nothing because no word  starts
1678       with "ab".
1679
1680   Correction
1681       Correction  also helps user input. If user inputs a wrong word, groonga
1682       can return correct words from registered correction pairs.
1683
1684       For example, there are registered correction pairs:
1685
1686                 ┌────────────────────────┬─────────────────────────┐
1687                 │wrong word              │ correct word            │
1688                 ├────────────────────────┼─────────────────────────┤
1689                 │grroonga gronga gronnga │ groonga groonga groonga │
1690                 └────────────────────────┴─────────────────────────┘
1691
1692       An user inputs "gronga" and groonga returns "groonga" because  "gronga"
1693       is in wrong word and corresponding correct word is "groonga".
1694
1695       An  user  inputs  "roonga" and groonga returns nothing because "roonga"
1696       isn't in wrong word.
1697
1698   Suggestion
1699       Suggestion helps that user filters many found documents. If user inputs
1700       a  query,  groonga can return new queries that has more additional key‐
1701       words from registered related query pairs.
1702
1703       For example, there are registered related query pairs:
1704
1705                          ┌────────┬───────────────────────┐
1706                          │keyword │ related query         │
1707                          ├────────┼───────────────────────┤
1708                          │groonga │ groonga search engine │
1709                          ├────────┼───────────────────────┤
1710                          │search  │ Google search         │
1711                          ├────────┼───────────────────────┤
1712                          │speed   │ groonga speed         │
1713                          └────────┴───────────────────────┘
1714
1715       An user inputs "groonga" and groonga returns  "groonga  search  engine"
1716       because  "groonga"  is  in  keyword  column and related query column is
1717       "groonga search engine".
1718
1719       An user inputs "MySQL" and  groonga  returns  nothing  because  "MySQL"
1720       isn't in keyword column values.
1721
1722   Learning
1723       The  suggest feature requires registered data before using the feature.
1724       Those data can be registered from user  inputs.   Gronnga-suggest-httpd
1725       and groonga-suggest-learner commands are provided for the propose.
1726
1727   Tutorial
1728       TODO...
1729
1730   Completion
1731       This section describes about the following completion features:
1732
1733       · How it works
1734
1735       · How to use
1736
1737       · How to learn
1738
1739   How it works
1740       The completion feature uses three searches to compute completed words:
1741
1742          1. Prefix RK search against registered words.
1743
1744          2. Cooccurrence search against learned data.
1745
1746          3. Prefix search against registered words. (optional)
1747
1748   Prefix RK search
1749       RK  means  Romaji  and  Katakana.  Prefix RK search can find registered
1750       words that start with user's input by  romaji,  katakana  or  hiragana.
1751       It's useful for searching in Japanese.
1752
1753       For  example,  there is a registered word "日本". And "ニホン" (it must
1754       be katakana) is registered as its reading. An user can find  "日本"  by
1755       "ni", "二" or "に".
1756
1757   Cooccurrence search
1758       Cooccurrence  search  can  find  registered  words  from user's partial
1759       input. It uses user input sequences that will  be  learned  from  query
1760       logs, access logs and so on.
1761
1762       For example, there is the following user input sequence:
1763
1764                               ┌────────┬────────────┐
1765                               │input   │ submit     │
1766                               ├────────┼────────────┤
1767                               │s       │ no         │
1768                               ├────────┼────────────┤
1769                               │se      │ no         │
1770                               ├────────┼────────────┤
1771                               │sea     │ no         │
1772                               ├────────┼────────────┤
1773                               │sear    │ no         │
1774                               ├────────┼────────────┤
1775                               │searc   │ no         │
1776                               ├────────┼────────────┤
1777                               │search  │ yes        │
1778                               ├────────┼────────────┤
1779                               │e       │ no         │
1780                               ├────────┼────────────┤
1781                               │en      │ no         │
1782                               ├────────┼────────────┤
1783                               │eng     │ no         │
1784                               ├────────┼────────────┤
1785                               │engi    │ no         │
1786                               ├────────┼────────────┤
1787                               │engin   │ no         │
1788                               ├────────┼────────────┤
1789                               │engine  │ no         │
1790                               ├────────┼────────────┤
1791                               │enginen │ no (typo!) │
1792                               └────────┴────────────┘
1793
1794
1795                               │engine  │ yes        │
1796                               └────────┴────────────┘
1797
1798       Groonga creates the following completion pairs:
1799
1800                             ┌────────┬────────────────┐
1801                             │input   │ completed word │
1802                             ├────────┼────────────────┤
1803                             │s       │ search         │
1804                             ├────────┼────────────────┤
1805                             │se      │ search         │
1806                             ├────────┼────────────────┤
1807                             │sea     │ search         │
1808                             ├────────┼────────────────┤
1809                             │sear    │ search         │
1810                             ├────────┼────────────────┤
1811                             │searc   │ search         │
1812                             ├────────┼────────────────┤
1813                             │e       │ engine         │
1814                             ├────────┼────────────────┤
1815                             │en      │ engine         │
1816                             ├────────┼────────────────┤
1817                             │eng     │ engine         │
1818                             ├────────┼────────────────┤
1819                             │engi    │ engine         │
1820                             ├────────┼────────────────┤
1821                             │engin   │ engine         │
1822                             ├────────┼────────────────┤
1823                             │engine  │ engine         │
1824                             ├────────┼────────────────┤
1825                             │enginen │ engine         │
1826                             └────────┴────────────────┘
1827
1828       All user not-submitted inputs (e.g. "s", "se" and so on) before each an
1829       user submission maps to the submitted input (e.g. "search").
1830
1831       To be precise, this description isn't correct because  it  omits  about
1832       time  stamp.  Groonga doesn't case about "all user not-submitted inputs
1833       before each an user submission". Groonga  just  case  about  "all  user
1834       not-submitted  inputs  within  a  minute from an user submission before
1835       each an user submission". Groonga doesn't treat user  inputs  before  a
1836       minute ago.
1837
1838       If  an  user  inputs  "sea"  and  cooccurrence  search returns "search"
1839       because "sea" is in input column and corresponding completed word  col‐
1840       umn value is "search".
1841
1842   Prefix search
1843       Prefix  search  can  find registered word that start with user's input.
1844       This search doesn't care about romaji, katakana and hiragana  not  like
1845       Prefix RK search.
1846
1847       This search isn't always ran. It's just ran when it's requested explic‐
1848       itly or both prefix RK search and cooccurrence search return nothing.
1849
1850       For example, there is a registered word  "search".  An  user  can  find
1851       "search" by "s", "se", "sea", "sear", "searc" and "search".
1852
1853   How to use
1854       Groonga  provides  /commands/suggest  command to use completion. --type
1855       complete option requests completion.
1856
1857       For example, here is an command to get completion results by "en":
1858
1859       Execution example:
1860
1861       > suggest --table item_query --column kana --types complete --frequency_threshold 1 --query en
1862       [[0,1317212704.42103,0.001348612],{"complete":[[1],[["_key","ShortText"],["_score","Int32"]],["engine",1]]}]
1863
1864   How it learns
1865       Cooccurrence search uses learned data. They are based  on  query  logs,
1866       access logs and so on. To create learned data, groonga needs user input
1867       sequence with time stamp and user submit input with time stamp.
1868
1869       For example, an user wants to search by "engine". The user  inputs  the
1870       query with the following sequence:
1871
1872          1. 2011-08-10T13:33:23+09:00: e
1873
1874          2. 2011-08-10T13:33:23+09:00: en
1875
1876          3. 2011-08-10T13:33:24+09:00: eng
1877
1878          4. 2011-08-10T13:33:24+09:00: engi
1879
1880          5. 2011-08-10T13:33:24+09:00: engin
1881
1882          6. 2011-08-10T13:33:25+09:00: engine (submit!)
1883
1884       Groonga  can  be  learned from the input sequence by the following com‐
1885       mand:
1886
1887       load --table event_query --each 'suggest_preparer(_id, type, item, sequence, time, pair_query)'
1888       [
1889       {"sequence": "1", "time": 1312950803.86057, "item": "e"},
1890       {"sequence": "1", "time": 1312950803.96857, "item": "en"},
1891       {"sequence": "1", "time": 1312950804.26057, "item": "eng"},
1892       {"sequence": "1", "time": 1312950804.56057, "item": "engi"},
1893       {"sequence": "1", "time": 1312950804.76057, "item": "engin"},
1894       {"sequence": "1", "time": 1312950805.86057, "item": "engine", "type": "submit"}
1895       ]
1896
1897   Correction
1898       This section describes about the following correction features:
1899
1900       · How it works
1901
1902       · How to use
1903
1904       · How to learn
1905
1906   How it works
1907       The correction feature uses three searches to compute corrected words:
1908
1909          1. Cooccurrence search against learned data.
1910
1911          2. Similar search against registered words. (optional)
1912
1913   Cooccurrence search
1914       Cooccurrence search can find registered words from user's wrong  input.
1915       It  uses  user  submit  sequences that will be learned from query logs,
1916       access logs and so on.
1917
1918       For example, there are the following user submissions:
1919
1920                    ┌────────────────┬───────────────────────────┐
1921                    │query           │ time                      │
1922                    ├────────────────┼───────────────────────────┤
1923                    │serach (typo!)  │ 2011-08-10T22:20:50+09:00 │
1924                    ├────────────────┼───────────────────────────┤
1925                    │search (fixed!) │ 2011-08-10T22:20:52+09:00 │
1926                    └────────────────┴───────────────────────────┘
1927
1928       Groonga creates the following correction pair from  the  above  submis‐
1929       sions:
1930
1931                              ┌───────┬────────────────┐
1932                              │input  │ corrected word │
1933                              ├───────┼────────────────┤
1934                              │serach │ search         │
1935                              └───────┴────────────────┘
1936
1937       Groonga  treats continuous submissions within a minute as input correc‐
1938       tion by user. Not submitted user input sequence between two submissions
1939       isn't used as learned data for correction.
1940
1941       If  an  user  inputs  "serach" and cooccurrence search returns "search"
1942       because "serach" is in input column and  corresponding  corrected  word
1943       column value is "search".
1944
1945   Similar search
1946       Similar  search can find registered words that has one or more the same
1947       tokens as user input. TokenBigram tokenizer is  used  for  tokenization
1948       because  suggest  dataset  schema  created by /executables/groonga-sug‐
1949       gest-create-dataset uses TokenBigram  tokenizer  as  the  default  tok‐
1950       enizer.
1951
1952       For  example,  there is a registered query "search engine". An user can
1953       find "search engine" by "web search service", "sound engine" and so on.
1954       Because  "search  engine"  and  "web search engine" have the same token
1955       "search" and "search engine" and "sound engine"  have  the  same  token
1956       "engine".
1957
1958       "search   engine"   is  tokenized  to  "search"  and  "engine"  tokens.
1959       (Groonga's TokenBigram tokenizer doesn't tokenize  two  characters  for
1960       continuous  alphabets  and continuous digits for reducing search noise.
1961       TokenBigramSplitSymbolAlphaDigit tokenizer should  be  used  to  ensure
1962       tokenizing  to  two  characters.)  "web search service" is tokenized to
1963       "web", "search" and "service". "sound engine" is tokenized  to  "sound"
1964       and "engine".
1965
1966   How to use
1967       Groonga  provides  /commands/suggest  command to use correction. --type
1968       correct option requests corrections.
1969
1970       For example, here is an command to get correction results by "saerch":
1971
1972       Execution example:
1973
1974       > suggest --table item_query --column kana --types correction --frequency_threshold 1 --query saerch
1975       [[0,1317212708.7696,0.000882462],{"correct":[[1],[["_key","ShortText"],["_score","Int32"]],["search",1]]}]
1976
1977   How it learns
1978       Cooccurrence search uses learned data. They are based  on  query  logs,
1979       access  logs and so on. To create learned data, groonga needs user sub‐
1980       mit inputs with time stamp.
1981
1982       For example, an user wants to search by "search" but the user has  typo
1983       "saerch"  before  inputs  the  correct query. The user inputs the query
1984       with the following sequence:
1985
1986          1. 2011-08-10T13:33:23+09:00: s
1987
1988          2. 2011-08-10T13:33:23+09:00: sa
1989
1990          3. 2011-08-10T13:33:24+09:00: sae
1991
1992          4. 2011-08-10T13:33:24+09:00: saer
1993
1994          5. 2011-08-10T13:33:24+09:00: saerc
1995
1996          6. 2011-08-10T13:33:25+09:00: saerch (submit!)
1997
1998          7. 2011-08-10T13:33:29+09:00: serch (correcting...)
1999
2000          8. 2011-08-10T13:33:30+09:00: search (submit!)
2001
2002       Groonga can be learned from the input sequence by  the  following  com‐
2003       mand:
2004
2005       load --table event_query --each 'suggest_preparer(_id, type, item, sequence, time, pair_query)'
2006       [
2007       {"sequence": "1", "time": 1312950803.86057, "item": "s"},
2008       {"sequence": "1", "time": 1312950803.96857, "item": "sa"},
2009       {"sequence": "1", "time": 1312950804.26057, "item": "sae"},
2010       {"sequence": "1", "time": 1312950804.56057, "item": "saer"},
2011       {"sequence": "1", "time": 1312950804.76057, "item": "saerc"},
2012       {"sequence": "1", "time": 1312950805.76057, "item": "saerch", "type": "submit"},
2013       {"sequence": "1", "time": 1312950809.76057, "item": "serch"},
2014       {"sequence": "1", "time": 1312950810.86057, "item": "search", "type": "submit"}
2015       ]
2016
2017   Suggestion
2018       This section describes about the following completion features:
2019
2020       · How it works
2021
2022       · How to use
2023
2024       · How to learn
2025
2026   How it works
2027       The suggestion feature uses a search to compute suggested words:
2028
2029          1. Cooccurrence search against learned data.
2030
2031   Cooccurrence search
2032       Cooccurrence  search  can find related words from user's input. It uses
2033       user submissions that will be learned from query logs, access logs  and
2034       so on.
2035
2036       For example, there are the following user submissions:
2037
2038                                ┌────────────────────┐
2039                                │query               │
2040                                ├────────────────────┤
2041                                │search engine       │
2042                                ├────────────────────┤
2043                                │web search realtime │
2044                                └────────────────────┘
2045
2046       Groonga creates the following suggestion pairs:
2047
2048                          ┌─────────┬─────────────────────┐
2049                          │input    │ suggested words     │
2050                          ├─────────┼─────────────────────┤
2051                          │search   │ search engine       │
2052                          ├─────────┼─────────────────────┤
2053                          │engine   │ search engine       │
2054                          ├─────────┼─────────────────────┤
2055                          │web      │ web search realtime │
2056                          ├─────────┼─────────────────────┤
2057                          │search   │ web search realtime │
2058                          ├─────────┼─────────────────────┤
2059                          │realtime │ web search realtime │
2060                          └─────────┴─────────────────────┘
2061
2062       Those pairs are created by the following steps:
2063
2064          1. Tokenizes  user input query by TokenDelimit tokenizer that uses a
2065             space as token delimiter. (e.g. "search engine" is  tokenized  to
2066             two tokens "search" and "engine".)
2067
2068          2. Creates a pair that is consists of a token and original query for
2069             each token.
2070
2071       If an user inputs "search"  and  cooccurrence  search  returns  "search
2072       engine" and "web search realtime" because "search" is in two input col‐
2073       umns and corresponding suggested word columns have "search engine"  and
2074       "web search realtime".
2075
2076   How to use
2077       Groonga  provides  /commands/suggest  command to use suggestion. --type
2078       suggest option requests suggestion
2079
2080       For example, here is an command to get suggestion results by "search":
2081
2082       Execution example:
2083
2084       > suggest --table item_query --column kana --types suggest --frequency_threshold 1 --query search
2085       [[0,1317212711.42188,0.000553344],{"suggest":[[2],[["_key","ShortText"],["_score","Int32"]],["search engine",1],["web search realtime",1]]}]
2086
2087   How it learns
2088       Cooccurrence search uses learned data. They are based  on  query  logs,
2089       access logs and so on. To create learned data, groonga needs user input
2090       sequence with time stamp and user submit input with time stamp.
2091
2092       For example, an user wants to search by "engine". The user  inputs  the
2093       query with the following sequence:
2094
2095          1. 2011-08-10T13:33:23+09:00: search engine (submit)
2096
2097          2. 2011-08-10T13:33:28+09:00: web search realtime (submit)
2098
2099       Groonga can be learned from the submissions by the following command:
2100
2101       load --table event_query --each 'suggest_preparer(_id, type, item, sequence, time, pair_query)'
2102       [
2103       {"sequence": "1", "time": 1312950803.86057, "item": "search engine", "type": "submit"},
2104       {"sequence": "1", "time": 1312950808.86057, "item": "web search realtime", "type": "submit"}
2105       ]
2106
2108       Groonga supports geolocation search. It uses index for search. It means
2109       that you can search by geolocation fast like fulltext search.
2110
2111   Supported features
2112       Groonga supports only point as data  type.  Line,  surface  and  so  on
2113       aren't supported yet. Here is a feature list:
2114
2115       1. Groonga can store a point to a column.
2116
2117       2. Groonga  can  search records that have a point in the specified rec‐
2118          tangle.
2119
2120       3. Groonga can search records that have a point in the  specified  cir‐
2121          cle.
2122
2123       4. Groonga can calculate distance between two points.
2124
2125       5. Groonga  can  sort  records  by distance from the specified point in
2126          ascending order.
2127
2128       Here are use cases for groonga's geolocation search:
2129
2130       · You list McDonald's around a station.
2131
2132       · You list KFS around the current location sort by  distance  from  the
2133         current location in ascending order with distance.
2134
2135       Here are not use cases:
2136
2137       · You search McDonald's in a city. (Groonga doesn't support geolocation
2138         search by a shape except a rectangle and a circle.)
2139
2140       · You store a region instead of a point as a  lake  record.  (A  column
2141         can't has geolocation data except a point.)
2142
2143       The following figures show about groonga's geolocation search features.
2144
2145       Here  is  a  figure  that  only  has records. A black point describes a
2146       record. The following figures shows how records are  treated.   [image:
2147       only records] [image]
2148
2149       Coming soon...
2150

リファレンスマニュアル

2152   実行ファイル
2153       groongaパッケージが提供する実行ファイルについて説明します。
2154
2155   grnslap
2156   名前
2157       grnslap - groongaプロセスの通信層のパフォーマンスをチェックするツール
2158
2159   書式
2160       grnslap [options] [dest]
2161
2162   説明
2163       grnslapは、groongaプロセスに対してリクエストを多重に行い、パフォーマンスをチェックするためのツールです。
2164
2165       groonga独自プロトコルであるgqtpと、httpの両プロトコルでリクエストを行うことができます。また、リクエストの多重度を指定することができます。
2166
2167       クエリの内容を標準入力から与えることができます。実稼動環境でのクエリパタンに近いクエリを標準入力に与えることによって、実稼動環境に近い状態での検証を行うことができます。
2168
2169       現在は、make installしてもインストールは行われない。
2170
2171   オプション
2172       -P     リクエストのプロトコルを指定します。
2173
2174              http
2175                 httpでリクエストします。対象のhttpのパス群(GETパラメータを含む)をLF区切り形式で標準入力に与えると、それらのパスに順次アクセスします。
2176
2177              gqtp
2178                 gqtpでリクエストします。gqtpのリクエストをLF区切り形式で標準入力に与えると、それらのリクエストを順次行います。
2179
2180       -m     リクエストの多重度を指定します。初期値は10です。
2181
2182   引数
2183       dest   接続先のホスト名とポート番号をを指定します(デフォルト値は'local‐
2184              host:10041')。ポート番号を指定しない場合には、10041が指定されたものとします。
2185
2186   サンプル
2187       http://localhost:10041/d/status に、多重度100でリクエストを行う。
2188
2189       > yes /d/status | head -n 100 | grnslap -P http -m 100 localhost:10041
2190       2009-11-12 19:34:09.998696|begin: max_concurrency=100 max_tp=10000
2191       2009-11-12 19:34:10.011208|end  : n=100 min=46 max=382 avg=0 qps=7992.966190 etime=0.012511
2192
2193   grntest
2194   名前
2195       grntest - groongaテストプログラム
2196
2197   書式
2198       grntest  [options...] [script] [db]
2199
2200   説明
2201       grntestは、groonga汎用テストツールです。
2202
2203       groongaを単独のプロセスとして利用する場合はもちろん、サーバプログラムとして利用する場合の動作確認や実行速度測定が可能です。
2204
2205       grn‐
2206       test用のデータファイルは自分で作成することも既存のものを利用することもできます。既存のデータファイルは、ftp.groonga.orgから必要に応じダウンロードします。そのため、groonga及びgrn‐
2207       testが動作し、インターネットに接続できる環境であればgroongaコマンドの知識がなくてもgroongaの動作を確認できます。
2208
2209       現在は、Linux                           及びWindows上で動作します。make
2210       installしてもインストールは行われません。
2211
2212   オプション
2213       -i, --host <ip/hostname>
2214              接続するgroongaサーバを、ipアドレスまたはホスト名で指定します。指定先にgroongaサーバが立ち上がっていない場合、接続不能となることに注意してください。このオプションを指定しない場合、grn‐
2215              testは自動的にlocalhostのgroongaサーバを起動して接続します。
2216
2217       -p, --port <port number>
2218              自動的に起動するgroongaサーバ、または明示的に指定した接続先のgroonga
2219              サーバが利用するポート番号を指定します。接続先のgroongaサーバが利用しているポートと、このオプションで指定したポート番号が異なる場合、接続不能となることに注意してください。
2220
2221       --dir  ftp.groonga.org に用意されているスクリプトファイルを表示します。
2222
2223       --ftp  ftp.groonga.orgとFTP通信を行い、scriptファイルの同期やログファイルの送信を行います。
2224
2225       --log-output-dir
2226              デフォルトでは、grn‐
2227              test終了後のログファイルの出力先ははカレントディレクトリです。このオプションを利用すると、任意のディレクトリに出力先を変更することができます。
2228
2229       --groonga <groonga_path>
2230              groongaコマンドのパスを指定します。デフォルトでは、PATHの中からgroongaコマンドを探します。
2231
2232       --protocol <gqtp|http>
2233              groongaコマンドが使うプロトコルとして    gqtp    または     http
2234              を指定します。
2235
2236   引数
2237       script grntestの動作方法(以下、grn‐
2238              test命令と呼びます)を記述したテキストファイルです。拡張子は.scrです。
2239
2240       db     grntestが利用するgroonga
2241              データベースです。指定されたデータベースが存在しない場合、grn‐
2242              testが新規に作成します。またgroonga
2243              サーバを自動的に起動する場合もこの引数で指定したデータベースが利用されます。接続するgroonga
2244              サーバを明示的に指定した場合に利用するデータベースは、接続先サーバが使用中のデータベースになることに注意してください。
2245
2246   使い方
2247       まず、シェル上(Windowsならコマンドプロンプト上)で:
2248
2249       grntest test.scr 任意のDB名
2250
2251       とタイプしてください。もしgrntestが正常に動作すれば、:
2252
2253       test-ユーザ名-数字.log
2254
2255       というファイルが作成されるはずです。作成されない場合、このドキュメントの「トラブルシューティング」の章を参照してください。
2256
2257   スクリプトファイル
2258       スクリプトファイルは、grntest命令を記述したテキストファイルです。
2259       ";"セミコロンを利用して、一行に複数のgrn‐
2260       test命令を記述することができます。一行に複数のgrn‐
2261       test命令がある場合、各命令は並列に実行されます。
2262       "#"で始まる行はコメントとして扱われます。
2263
2264   grntest命令
2265       現在サポートされているgrntest命令は以下の8つです。
2266          do_local コマンドファイル [スレッド数] [繰り返し数]
2267              コマンドファイルをgrn‐
2268              test単体で実行します。スレッド数が指定されている場合、複数のスレッドで同じコマンドファイルを同時に実行します。繰り返し数が指定されてい場合、コマンドファイルの内容を繰り返し実行します。スレッド数、繰り返し数とも省略時は1です。1スレッドで複数回動作させたい場合は、do_local
2269              コマンドファイル 1 [繰り返し数]と明示的に指定してください。
2270
2271          do_gqpt コマンドファイル [スレッド数] [繰り返し数]
2272              コマンドファイルをgroongaサーバで実行します。スレッド数や繰り返し数の意味はdo_localの場合と同じです。
2273
2274          rep_local コマンドファイル [スレッド数] [繰り返し数]
2275              コマンドファイルをgrn‐
2276              test単体で実行し、より詳細な報告を行います。
2277
2278          rep_gqpt コマンドファイル [スレッド数] [繰り返し数]
2279              コマンドファイルをgroongaサーバで実行し、より詳細な報告を行います。
2280              スレッド数や繰り返し数の意味はdo_localと 同じです。
2281
2282          out_local コマンドファイル 入力ファイル名
2283              コマンドファイルをgrn‐
2284              test単体で実行し、各コマンドの実行結果をすべて”出力ファイル"に書きだします。この結果は、test_local, test_gqtp命令で利用します。なおこの命令の「出力ファイル」とは、grn‐
2285              test実行時に自動的に作成されるログとは別のものです。grn‐
2286              testではコメントが利用できる以外、:
2287
2288              groonga < コマンドファイル > 出力ファイル
2289
2290              とした場合と同じです。
2291
2292          out_gqtp コマンドファイル 出力ファイル名
2293              コマンドファイルをgroongaサーバで実行します。その他はout_local命令と同等です。
2294
2295          test_local コマンドファイル 入力ファイル名
2296                 コマンドファイルをgrn‐
2297                 test単体で実行し、各コマンドの実行結果を入力ファイルと比較します。処理時間など本質的要素以外に差分があった場合、差分を、入力ファイル.diffというファイルに書きだします。
2298
2299   コマンドファイル
2300       コマンドファイルは、groonga組み込みコマンドを1行に1つずつ記述したテキストファイルです。拡張子に制限はありません。groonga組み込みコマンドに関しては
2301       /commands を参照してください。
2302
2303   サンプル
2304       スクリプトファイルのサンプルです。:
2305
2306       # sample script
2307       rep_local test.ddl
2308       do_local test.load;
2309       do_gqtp test.select 10 10; do_local test.status 10
2310
2311       上記の意味は以下のとおりです。
2312
2313          1行目  コメント行。
2314
2315          2行目  test.dll
2316                 というコマンドファイルをgroonga単体で実行し、詳細に報告する。
2317
2318          3行目  test.load
2319                 というコマンドファイルをgroonga単体で実行する。(最後の";"セミコロンは複数のgrn‐
2320                 test命令を記述する場合に必要ですが、この例のように1つのgrn‐
2321                 test命令を実行する場合に付与しても問題ありません。)
2322
2323          4行目  test.select
2324                 というコマンドファイルをgroongaサーバで10個のスレッドで同時に実行する。各スレッドはtest.selectの中身を10回繰り返す。また同時に、groonga単体でtest.sta‐
2325                 tusというコマンドファイルを10個のスレッドで実行する。
2326
2327   特殊命令
2328       スクリプトファイルのコメント行には特殊コマンドを埋め込むことが可能です。現在サポートされている特殊命令は以下の二つです。
2329
2330          #SET_HOST <ip/hostname>
2331                 -i,
2332                 --hostオプションと同等の機能です。コマンドラインオプションに指定したIPアドレス/ホスト名と、SET_HOSTで指定したIPアドレス/ホスト名が異なる場合、またコマンドラインオプションを指定しなかった場合にもSET_HOSTが優先されます。SET_HOSTを利用した場合、サーバが自動的には起動されないのもコマンドラインオプションで指定した場合と同様です。
2333
2334          #SET_PORT <port number>
2335                 -p,                                                    --port
2336                 オプションと同等の機能です。コマンドラインオプションに指定したポート番号とSET_PORTで指定したポート番号が異なる場合、またコマンドラインオプションを指定しなかった場合にもSET_PORTが優先されます。
2337
2338       特殊命令はスクリプトファイルの任意の場所に書き込むことができます。同一ファイル内に複数回特殊命令を記述した場合、「最後の」特殊命令が有効となります。
2339
2340       例えば、
2341
2342       $ ./grntest --port 20010 test.scr testdb
2343
2344       とコマンド上でポートを指定した場合でも、もしtest.scrの中身が
2345
2346       #SET_PORT 10900
2347       rep_local test.ddl
2348       do_local test.load;
2349       rep_gqtp test.select 10 10; rep_local test.status 10
2350       #SET_PORT 10400
2351
2352       であれば、自動的に起動されるgroongaサーバはポート番号10400を利用します。
2353
2354   grntest実行結果
2355       grn‐
2356       testが正常に終了すると、(拡張子を除いた)スクリプト名-ユーザ名-実行開始時刻.logという形式のログファイルがカレントディレクトリに作られます。ログファイルは自動的にftp.groonga.org
2357       に送信されます。ログファイルは以下のようなjson形式のテキストです。
2358
2359       [{"script": "test.scr",
2360         "user": "homepage",
2361         "date": "2010-04-14 22:47:04",
2362         "CPU": Intel(R) Pentium(R) 4 CPU 2.80GHz",
2363         "BIT": 32,
2364         "CORE": 1,
2365         "RAM": "975MBytes",
2366         "HDD": "257662232KBytes",
2367         "OS": "Linux 2.4.20-24.7-i686",
2368         "HOST": "localhost",
2369         "PORT": "10041",
2370         "VERSION": "0.1.8-100-ga54c5f8"
2371       },
2372       {"jobs": "rep_local test.ddl",
2373       "detail": [
2374       [0, "table_create res_table --key_type ShortText", 1490, 3086, [0,1271252824.25846,0.00144
2375       7]],
2376       [0, "column_create res_table res_column --type Text", 3137, 5956, [0,1271252824.2601,0.002
2377       741]],
2378       [0, "column_create res_table user_column --type Text", 6020, 8935, [0,1271252824.26298,0.0
2379       02841]],
2380       [0, "column_create res_table mail_column --type Text", 8990, 11925, [0,1271252824.26595,0.
2381       002861]],
2382       [0, "column_create res_table time_column --type Time", 12008, 13192, [0,1271252824.26897,0
2383       .001147]],
2384       [0, "status", 13214, 13277, [0,1271252824.27018,3.0e-05]],
2385       [0, "table_create thread_table --key_type ShortText", 13289, 14541, [0,1271252824.27025,0.
2386       001213]],
2387       [0, "column_create thread_table thread_title_column --type ShortText", 14570, 17380, [0,12
2388       71252824.27153,0.002741]],
2389       [0, "status", 17435, 17480, [0,1271252824.2744,2.7e-05]],
2390       [0, "table_create lexicon_table --flags 129 --key_type ShortText --default_tokenizer Token
2391       Bigram", 17491, 18970, [0,1271252824.27446,0.001431]],
2392       [0, "column_create lexicon_table inv_res_column 514 res_table res_column ", 18998, 33248,
2393       [0,1271252824.27596,0.01418]],
2394       [0, "column_create lexicon_table inv_thread_column 514 thread_table thread_title_column ",
2395        33285, 48472, [0,1271252824.29025,0.015119]],
2396       [0, "status", 48509, 48554, [0,1271252824.30547,2.7e-05]]],
2397       "summary" :[{"job": "rep_local test.ddl", "latency": 48607, "self": 47719, "qps": 272.4281
2398       73, "min": 45, "max": 15187, "queries": 13}]},
2399       {"jobs": "do_local test.load; ",
2400       "summary" :[{"job": "do_local test.load", "latency": 68693, "self": 19801, "qps": 1010.049
2401       997, "min": 202, "max": 5453, "queries": 20}]},
2402       {"jobs": "do_gqtp test.select 10 10; do_local test.status 10",
2403       "summary" :[{"job": " do_local test.status 10", "latency": 805990, "self": 737014, "qps":
2404       54.273053, "min": 24, "max": 218, "queries": 40},{"job": "do_gqtp test.select 10 10", "lat
2405       ency": 831495, "self": 762519, "qps": 1967.164097, "min": 73, "max": 135631, "queries": 15
2406       00}]},
2407       {"total": 915408, "qps": 1718.359464, "queries": 1573}]
2408
2409   制限事項
2410       · スクリプトファイルの一行には複数のgrn‐
2411         test命令を記述できますが、すべてのスレッド数の合計は最大64までに制限されます。
2412
2413       · コマンドファイル中のgroongaコマンドの長さは最長5000000byteです。
2414
2415   トラブルシューティング
2416       もし、grntestが正常に動作しない場合、まず以下を確認してください。
2417
2418       · インターネットに接続しているか?  --ftp  オプションを指定すると、grn‐
2419         testは動作のたびにftp.groonga.orgと通信します。ftp.groonga.orgと通信可能でない場合、grn‐
2420         testは正常に動作しません。
2421
2422       · groonga       サーバが動作していないか? grntestは、-i,       --host
2423         オプションで明示的にサーバを指定しないかぎり、自動的にlocal‐
2424         hostのgroongaサーバを立ち上げます。すでにgroongaサーバが動作している場合、grn‐
2425         testは正常に動作しない可能性があります。
2426
2427       · 指定したDBが適切か?                                             grn‐
2428         testは、引数で指定したDBの中身はチェックしません。もし指定されたDBが存在しなければ自動的にDBを作成しますが、もしファイルとして存在する場合は中身に関わらず動作を続けてしまい、結果が異常になる可能性があります。
2429
2430       以上の原因でなければ、問題はgrn‐
2431       testかgroongaにあります。ご報告をお願いします。
2432
2433   groonga実行ファイル
2434   名前
2435       groonga - 列指向データベース機能を持つ全文検索エンジンソフトウェア
2436
2437   書式
2438       groonga [options] [dest] [command [args]]
2439
2440   説明
2441       groongaは列指向のデータベース機能を持つ高速でスケーラブルな全文検索エンジンです。
2442       groongaのデータベースは、groonga実行ファイルかCライブラリインタフェースを通して操作することができます。このマニュアルページでは、groonga実行ファイルの使い方について説明します。
2443
2444   オプション
2445       -n     新たなデータベースを作成します。
2446
2447       -c     クライアントモードで実行します。
2448
2449       -s     サーバモードで実行します。
2450
2451       -d     デーモンモードで実行します。(forkする点がサーバモードと異なる)
2452
2453       -e, --encoding <encoding>
2454              データベースで使用する文字エンコーディング方式を指定します。新たなデータベースを作成する時のみ有効です。none,
2455              euc, utf8, sjis, latin, koi8rのいずれかが指定できます。
2456
2457       -l, --log-level <log level>
2458              ログレベルを指定します。0〜8までの数値が指定可能で、数が大きいほど多くのログが出力されます。
2459
2460       -a, --address <ip/hostname>
2461              Deprecated since version 1.2.2: Use --bind-address instead.
2462
2463       --bind-address <ip/hostname>
2464              New in version 1.2.2.
2465
2466              サーバモードかデーモンモードで実行するとき、lis‐
2467              tenするアドレスを指定します。(デフォルトは              hostname
2468              の返すホスト名)
2469
2470       -p, --port <port number>
2471              クライアント、サーバ、またはデーモンモードで使用するTCPポート番号。
2472              (デフォルトは10041番)
2473
2474       -i, --server-id <ip/hostname>
2475              サーバモードかデーモンモードで実行するとき、サーバのIDとなるアドレスを指定します。(デフォルトは`host‐
2476              name`の返すホスト名)
2477
2478       -h, --help
2479              ヘルプメッセージを出力します。
2480
2481       --document-root <path>
2482              httpサーバとしてgroongaを使用する場合に静的ページを格納するディレクトリを指定します。
2483
2484              デフォルトでは、データベースを管理するための汎用的なページに対応するファイルが/usr/share/groonga/admin_html以下にインストールされます。このディレクトリをdoc‐
2485              u‐
2486              ment-rootオプションの値に指定して起動した場合、ウェブブラウザでhttp://host
2487              name:port/index.htmlにアクセスすると、ウェブベースのデータベース管理ツールを使用できます。
2488
2489       --protocol <protocol>
2490              http,gqtpのいずれかを指定します。(デフォルトはgqtp)
2491
2492       --log-path <path>
2493              ログを出力するファイルのパスを指定します。(デフォルトは/var/log/groonga/groonga.logです)
2494
2495       --query-log-path <path>
2496              クエリーログを出力するファイルのパスを指定します。(デフォルトでは出力されません)
2497
2498       -t, --max-threads <max threasd>
2499              最大で利用するスレッド数を指定します。(デフォルトはマシンのCPUコア数と同じ数です)
2500
2501       --pid-path <path>
2502              PIDを保存するパスを指定します。(デフォルトでは保存しません)
2503
2504       --config-path <path>
2505              設定ファイルのパスを指定します。設定ファイルは以下のようなフォーマットになります。:
2506
2507              # '#'以降はコメント。
2508              ; ';'以降もコメント。
2509
2510              # 'キー = 値'でオプションを指定。
2511              pid-file = /var/run/groonga.pid
2512
2513              # '='の前後の空白はは無視される。↓は↑と同じ意味。
2514              pid-file=/var/run/groonga.pid
2515
2516              # 'キー'は'--XXX'スタイルのオプション名と同じものが使える。
2517              # 例えば、'--pid-path'に対応するキーは'pid-path'。
2518              # ただし、キーが'config-path'のオプションは無視される。
2519
2520       --cache-limit <limit>
2521              キャッシュ数の最大値を指定します。(デフォルトは100です)
2522
2523       --default-match-escalation-threshold <threshold>
2524              検索の挙動をエスカレーションする閾値を指定します。(デフォルトは0です)
2525
2526   引数
2527       dest   使用するデータベースのパス名を指定します。
2528
2529              クライアントモードの場合は接続先のホスト名とポート番号を指定します(デフォルト値は'local‐
2530              host:10041')。ポート番号を指定しない場合には、10041が指定されたものとします。
2531
2532       command [args]
2533              スタンドアロンおよびクライアントモードの場合は、実行するコマンドとその引数をコマンドライン引数に指定できます。コマンドライン引数にcom‐
2534              mandを与えなかった場合は、標準入力から一行ずつEOFに達するまでコマンド文字列を読み取り、順次実行します。
2535
2536   コマンド
2537       groonga実行ファイルを通してデータベースを操作する命令をコマンドと呼びます。コマンドは主にC言語で記述され、groongaプロセスにロードすることによって使用できるようになります。
2538       それぞれのコマンドは一意な名前と、0個以上の引数を持ちます。
2539
2540       引数は以下の2種類の方法のいずれかで指定することができます。:
2541
2542       形式1: コマンド名 値1 値2,..
2543
2544       形式2: コマンド名 --引数名1 値1 --引数名2 値2,..
2545
2546       形式1でコマンドを実行する場合は、定義された順番で値を指定しなければならず、途中の引数の値を省略することはできません。形式2でコマンドを実行する場合は、「--引数名」のように引数の名前を明示しなければならない代わりに、任意の順番で引数を指定することが可能で、途中の引数の指定を省略することもできます。
2547
2548       標準入力からコマンド文字列を与える場合は、コマンド名と引数名と値は、空白(
2549       )で区切ります。空白や、記号「"'()」のうちいずれかを含む値を指定したい場合は、シングルクォート(')かダブルクォート(")で値を囲みます。値として指定する文字列の中では、改行文字は'n'に置き換えて指定します。また、引用符に使用した文字を値の中で指定する場合には、その文字の前にバックスラッシュ('')
2550       を指定します。バックスラッシュ文字自身を値として指定する場合には、その前にバックスラッシュを指定します。
2551
2552   組み込みコマンド
2553       以下のコマンドは組み込みコマンドとして予め定義されています。
2554
2555          status groongaプロセスの状態を表示します。
2556
2557          table_list
2558                 DBに定義されているテーブルのリストを表示します。
2559
2560          column_list
2561                 テーブルに定義されているカラムのリストを表示します。
2562
2563          table_create
2564                 DBにテーブルを追加します。
2565
2566          column_create
2567                 テーブルにカラムを追加します。
2568
2569          table_remove
2570                 DBに定義されているテーブルを削除します。
2571
2572          column_remove
2573                 テーブルに定義されているカラムを削除します。
2574
2575          view_add
2576                 VIEW型のテーブルに要素となるテーブルを定義します。
2577
2578          load   テーブルにレコードを挿入します。
2579
2580          select テーブルに含まれるレコードを検索して表示します。
2581
2582          define_selector
2583                 検索条件をカスタマイズした新たな検索コマンドを定義します。
2584
2585          quit   データベースとのセッションを終了します。
2586
2587          shutdown
2588                 サーバ(デーモン)プロセスを停止します。
2589
2590          log_level
2591                 ログ出力レベルを設定します。
2592
2593          log_put
2594                 ログ出力を行います。
2595
2596          clearlock
2597                 ロックを解除します。
2598
2599   
2600       新しいデータベースを作成します。:
2601
2602       % groonga -n /tmp/hoge.db quit
2603       %
2604
2605       作成済みのデータベースにテーブルを定義します。:
2606
2607       % groonga /tmp/hoge.db table_create Table 0 ShortText
2608       [[0]]
2609       %
2610
2611       サーバを起動します。:
2612
2613       % groonga -d /tmp/hoge.db
2614       %
2615
2616       httpサーバとして起動します。:
2617
2618       % groonga -d -p 80 --protocol http --document-root /usr/share/groonga/admin_html /tmp/hoge.db
2619       %
2620
2621       サーバに接続し、テーブル一覧を表示します。:
2622
2623       % groonga -c localhost table_list
2624       [[0],[["id","name","path","flags","domain"],[256,"Table","/tmp/hoge.db.0000100",49152,14]]]
2625       %
2626
2627   groonga HTTPサービス
2628   名前
2629       groonga HTTPサービス
2630
2631   書式
2632       groonga -d --protocol http DB_PATH
2633
2634   説明
2635       groongaサーバを起動する時に--proto‐
2636       colオプションにhttpを指定すると、httpで通信可能になります。また、--doc‐
2637       ument-root
2638       によって静的ページのパスを指定すると、httpリクエストに指定されたURIに対応する、パス配下に置かれたファイルを出力します。
2639
2640       groongaにはHTML                                                       +
2641       JavaScriptで実装された管理ツールが標準で付属しています。--docu‐
2642       ment-rootを指定しない場合は管理ツールがインストールされているパスが指定されたとみなされますので、ウェブブラウザでhttp://host
2643       name:port/にアクセスすると、管理ツールを利用できます。
2644
2645   コマンド
2646       httpを指定して起動したgroongaサーバに対しても、他のモードで起動したgroongaと同じコマンドが使用できます。
2647
2648       コマンドは、複数の引数をとります。引数にはそれぞれ名前があります。また、特殊な引数である「out‐
2649       put_type」と「command_version」があります。
2650
2651       スタンドアロンやクライアントモードでは、コマンドは以下のような形式で指定します。
2652          形式1: コマンド名 値1 値2,..
2653
2654          形式2: コマンド名 --引数名1 値1 --引数名2 値2,..
2655
2656       形式1と形式2は混在させることができます。これらの形式では、out‐
2657       put_typeという引数名を用いてoutput_typeを指定します。
2658
2659       httpでgroongaサーバと通信する際には、以下のような形式でコマンドを指定します。:
2660
2661       形式: /d/コマンド名.output_type?引数名1=値1&引数名2=値2&...
2662
2663       ただし、コマンド名、引数名、値はURLエンコードが必要です。
2664
2665       GETメソッドのみが使用可能です。
2666
2667       output_typeにはjson, tsv, xmlが指定可能です。
2668
2669       command_versionはコマンドの仕様の互換性を指定します。詳細は       /com‐
2670       mand_version を参照してください。
2671
2672   返値
2673       output_typeの指定に従って、コマンドの実行結果を出力します。
2674
2675   groonga-suggest-create-dataset
2676   NAME
2677       groonga-suggest-create-dataset  -  Defines  schema  for  a   suggestion
2678       dataset
2679
2680   SYNOPSTIS
2681       groonga-suggest-create-dataset [options] DATABASE DATASET
2682
2683   DESCTIPION
2684       groonga-suggest-create-dataset  creates a dataset for /suggest. A data‐
2685       base has many datasets. This command just defines schea for  a  sugges‐
2686       tion dataset.
2687
2688   OPTIONS
2689       None.
2690
2691   EXIT STATUS
2692       TODO
2693
2694   FILES
2695       TODO
2696
2697   EXAMPLE
2698       TODO
2699
2700   SEE ALSO
2701       /suggest
2702
2703   コマンド
2704       まず、すべてのコマンドに関係するコマンドバージョンについて説明します。その後、組み込みのコマンドを順に説明します。
2705
2706   コマンドバージョン
2707   概要
2708       groonga1.1からコマンドバージョンという概念が導入されます。コマンドバージョンは、selectやloadなどのgroongaのコマンドの仕様の互換性を表します。groongaパッケージのバージョンが新しくなったとしても、同一のコマンドバージョンが使用可能であるなら、すべてのコマンドについて互換性が保証されます。コマンドバージョンが異なれば、同じ名前のコマンドであっても、動作に互換性がない可能性があります。
2709
2710       あるバージョンのgroongaは、二つのコマンドバージョンを同時にサポートするようになります。
2711       使用するコマンドバージョンは、groongaを起動する際のコマンドラインオプションないしコンフィグファイルにdefault-comm‐
2712       nad-ver‐
2713       sionパラメータを与えることによって指定できます。また、個々のコマンドを実行する際に、com‐
2714       mand_versionパラメータを与えることによっても指定することができます。
2715
2716       コマンドバージョンは1からはじまり、更新されるたびに1ずつ大きくなります。現状のgroongaのコマンドの仕様はcom‐
2717       mand-version 1という扱いになります。次回提供するgroongaは、command-ver‐
2718       sion 1とcommand-version 2の二つをサポートすることになります。
2719
2720   バージョンの位置づけ
2721       あるバージョンのgroongaにおいてサポートされるコマンドバージョンは、develop,
2722       stable,deprecatedのいずれかの位置づけとなります。
2723
2724       develop
2725              まだ開発中であり、仕様が変更される可能性があります。
2726
2727       stable 使用可能であり仕様も安定しています。その時点で使用することが推奨されます。
2728
2729       deprecated
2730              使用可能であり仕様も安定していますが、廃止予定であり使用が推奨されません。
2731
2732       あるバージョンのgroongaがサポートする二つのコマンドバージョンのうち、いずれか一つが必ずsta‐
2733       bleの位置づけとなります。残りの一つは、developないしdepre‐
2734       catedとなります。
2735
2736       たとえば下記のようにgroongaのサポートするコマンドバージョンは推移します。:
2737
2738       groonga1.1: command-version1=stable     command-version2=develop
2739       groonga1.2: command-version1=deprecated command-version2=stable
2740       groonga1.3: command-version2=stable     command-version3=develop
2741       groonga1.4: command-version2=deprecated command-version3=stable
2742       groonga1.5: command-version3=stable     command-version4=develop
2743
2744       あるコマンドバージョンははじめにdevelop扱いとしてリリースされ、やがてsta‐
2745       bleに移行します。  その後二世代経過するとそのコマンドバージョンはdepre‐
2746       cated扱いとなります。さらに次のコマンドバージョンがリリースされると、dep‐
2747       recatedだったコマンドバージョンはサポート対象外となります。
2748
2749       default-commnad-versionパラメータやcommand_ver‐
2750       sionパラメータを指定せずにgroongaコマンドを実行した際には、その時点でsta‐
2751       bleであるコマンドバージョンが指定されたものとみなします。
2752
2753       groongaプロセス起動時に、default-command-versionパラメータにsta‐
2754       ble扱いでないコマンドバージョンを指定した場合には、警告メッセージがログファイルに出力されます。また、サポート範囲外のコマンドバージョンを指定した場合にはエラーとなり、プロセスは速やかに停止します。
2755
2756   コマンドバージョンの指定方法
2757       コマンドバージョンの指定方法はgroonga実行モジュールの引数として指定する方法と各コマンドの引数として指定する方法があります。
2758
2759   default-command-versionパラメータ
2760       groonga実行モジュールの引数としてdefault-command-ver‐
2761       sionパラメータを指定できます。                                    (con‐
2762       figファイルの中に指定することも可能です)
2763
2764       実行例:
2765
2766       groonga --default-command-version 1
2767
2768       そのプロセスで実行するすべてのコマンドについて、デフォルトのコマンドバージョンとして指定されたバージョンを使用します。指定されたコマンドバージョンがsta‐
2769       bleであった場合にはなんのメッセージも表示されずそのまま起動します。指定されたコマンドバージョンがdevelopあるいはdep‐
2770       re‐
2771       catedであった場合には、groonga.logファイルに警告メッセージを出力します。指定されたコマンドバージョンがサポート対象外であった場合には標準エラー出力にエラーメッセージを出力し、プロセスは速やかに終了します。
2772
2773   command_versionパラメータ
2774       select,loadなどのすべてのgroongaコマンドにcommand_ver‐
2775       sionが指定できます。
2776
2777       実行例:
2778
2779       select --command_version 1 --table tablename
2780
2781       指定されたコマンドバージョンでコマンドを実行します。指定されたコマンドバージョンがサポート対象外であった場合にはエラーが返されます。com‐
2782       mand-versionが指定されなかった場合は、当該プロセス起動時にdefault-com‐
2783       mand-versionに指定した値が指定されたものとみなします。
2784
2785   cache_limit
2786   名前
2787       cache_limit - cacheサイズの設定・取得
2788
2789   書式
2790       cache_limit max
2791
2792   説明
2793       groonga組込コマンドの一つであるcache_limitについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
2794
2795       cache_limitは、クエリキャッシュの最大件数を取得したり設定したりします。
2796
2797   引数
2798       max
2799          クエリキャッシュの最大件数を整数で指定します。
2800          maxが指定されなかった場合には、クエリキャッシュの最大件数は変更せず、
2801          現在の設定値のみが返されます。
2802
2803   返値
2804   json
2805       [以前の設定値]
2806
2807       ``以前の設定値``
2808
2809         すでに設定されていたクエリキャッシュの最大件数を返す。
2810
2811   
2812       cache_limit 4
2813       [100]
2814
2815   check
2816   名前
2817       check - オブジェクトの状態表示
2818
2819   書式
2820       check obj
2821
2822   説明
2823       groonga組込コマンドの一つであるcheckについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
2824
2825       checkコマンドは、groongaプロセス内の指定したオブジェクトの状態を表示します。主にデータベースが壊れた場合など異常時の問題解決のために使用することを想定しています。デバッグ用のため、返値のフォーマットが安定しているということは保証されません。(フォーマットが変更される可能性が高い)
2826
2827   引数
2828       obj
2829          状態を表示するオブジェクトの名前を指定します。
2830
2831   返値
2832   json形式
2833       チェックするオブジェクトにより返される値が変わります。
2834
2835       インデックスカラムの場合:
2836
2837       下記のような配列が出力されます。
2838
2839         [インデックスの状態, バッファの状態1, バッファの状態2, ...]
2840
2841       ``インデックスの状態``には下記の項目がハッシュ形式で出力されます。
2842
2843       ``flags``
2844
2845         指定されているフラグ値です。16進数で表現されています。
2846
2847       ``max sid``
2848
2849         セグメントのうち最も大きなIDです。
2850
2851       ``number of garbage segments``
2852
2853         ゴミセグメントの数です。
2854
2855       ``number of array segments``
2856
2857         配列セグメントの数です。
2858
2859       ``max id of array segment``
2860
2861         配列セグメントのうち最も大きなIDです。
2862
2863       ``number of buffer segments``
2864
2865         バッファセグメントの数です。
2866
2867       ``max id of buffer segment``
2868
2869         バッファセグメントのうち最も大きなIDです。
2870
2871       ``max id of physical segment in use``
2872
2873         使用中の論理セグメントのうち最も大きなIDです。
2874
2875       ``number of unmanaged segments``
2876
2877         管理されていないセグメントの数です。
2878
2879       ``total chunk size``
2880
2881         チャンクサイズの合計です。
2882
2883       ``max id of chunk segments in use``
2884
2885         使用中のチャンクセグメントのうち最も大きなIDです。
2886
2887       ``number of garbage chunk``
2888
2889         各チャンク毎のゴミの数です。
2890
2891       ``バッファの状態``には下記の項目がハッシュ形式で出力されます。
2892
2893       ``buffer id``
2894
2895         バッファIDです。
2896
2897       ``chunk size``
2898
2899         チャンクのサイズです。
2900
2901       ``buffer term``
2902
2903         バッファ内にある語の一覧です。各語の状態は以下のような配列となっています。
2904
2905           [語, バッファに登録されている語のID, 用語集に登録されている語のID, バッファ内でのサイズ, チャンク内でのサイズ]
2906
2907       ``buffer free``
2908
2909         バッファの空き容量です。
2910
2911       ``size in buffer``
2912
2913         バッファの使用量です。
2914
2915       ``nterms``
2916
2917         バッファ内にある語の数です。
2918
2919       ``nterms with chunk``
2920
2921         バッファ内にある語のうち、チャンクを使っている語の数です。
2922
2923   
2924       テーブルTermsのインデックスカラムnameの状態を表示します。:
2925
2926       check Terms.name
2927       [{"flags":"00008202",
2928         "max sid":1,
2929         "number of garbage segments":0,
2930         "number of array segments":1,
2931         "max id of array segment":1,
2932         "number of buffer segments":110,
2933         "max id of buffer segment":111,
2934         "max id of physical segment in use":111,
2935         "number of unmanaged segments":4294967185,
2936         "total chunk size":7470239,
2937         "max id of chunk segments in use":127,
2938         "number of garbage chunk":[0,0,0,0,0,0,0,0,2,2,0,0,0,0,0]},
2939        {"buffer id":0,
2940         "chunk size":94392,
2941         "buffer term":["596","59777","6",...],
2942         "buffer free":152944,
2943         "size in buffer":7361,
2944         "nterms":237,
2945         "nterms with chunk":216,
2946         "buffer id":1,
2947         "chunk size":71236,
2948         "buffer term":[["に述",18149,18149,2,25,6,6],
2949                        ["に追",4505,4505,76,485,136,174],
2950                        ["に退",26568,26568,2,9,2,2],
2951                        ...],
2952         "buffer free":120000,
2953         "size in buffer":11155,
2954         "nterms":121,
2955         "nterms with chunk":116},
2956         {"buffer id":1,
2957          ...},
2958         ...]
2959
2960   clearlock
2961   名前
2962       clearlock - オブジェクトにセットされたロックを解除する
2963
2964   書式
2965       clearlock objname
2966
2967   説明
2968       groonga組込コマンドの一つであるclear‐
2969       lockについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
2970
2971       clear‐
2972       lockは、対象となるオブジェクト(データベース,テーブル,インデックス等)を指定し、オブジェクトにかけられたロックを再帰的に解除します。
2973
2974   引数
2975       objname
2976          対象となるオブジェクト名を指定します。空の場合、開いているdbオブジェクトが対象となります。
2977
2978       返値 ---
2979
2980   json形式
2981       [成功かどうかのフラグ]
2982
2983       ``成功かどうかのフラグ``
2984
2985         エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。
2986
2987   
2988       開いているデータベースのロックをすべて解除する:
2989
2990       clearlock
2991       [true]
2992
2993       テーブル名 Entry のカラム body のロックを解除する:
2994
2995       clearlock Entry.body
2996       [true]
2997
2998   関連項目
2999       load
3000
3001   column_create
3002   名前
3003       column_create - カラムの追加
3004
3005   書式
3006       column_create table name flags type [source]
3007
3008   説明
3009       groonga組込コマンドの一つであるcolumn_cre‐
3010       ateについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
3011
3012       column_cre‐
3013       ateは、使用しているデータベースのテーブルに対してカラムを追加します。
3014
3015   引数
3016       table
3017          カラムを追加するテーブルの名前を指定します。
3018
3019       name
3020          作成するカラムの名前を指定します。カラム名は、テーブルの中で一意でなければなりません。
3021
3022          ピリオド('.'),
3023          コロン(':')を含む名前のカラムは作成できません。また、アンダースコア('_')で始まる名前は予約済みであり、使用できません。
3024
3025       flags
3026          カラムの属性を表す以下の数値か、パイプ('|')で組み合わせたシンボル名を指定します。
3027
3028          0, COLUMN_SCALAR
3029                 単一の値が格納できるカラムを作成します。
3030
3031          1, COLUMN_VECTOR
3032                 複数の値の配列を格納できるカラムを作成します。
3033
3034          2, COLUMN_INDEX
3035                 インデックス型のカラムを作成します。
3036
3037          インデックス型のカラムについては、flagsの値に以下の値を加えることによって、追加の属
3038          性を指定することができます。
3039
3040          128, WITH_SECTION
3041                 段落情報を格納するインデックスを作成します。
3042
3043          256, WITH_WEIGHT
3044                 ウェイト情報を格納するインデックスを作成します。
3045
3046          512, WITH_POSITION
3047                 位置情報を格納するインデックス(完全転置インデックス)を作成します。
3048
3049       type
3050          値の型を指定します。groongaの組込型か、同一データベースに定義済みのユーザ定義型、定義済みのテーブルを指定することができます。
3051
3052       source
3053          インデックス型のカラムを作成した場合は、インデックス対象となるカラムをsource引数に指定します。
3054
3055   返値
3056   json形式
3057       [成功かどうかのフラグ]
3058
3059       ``成功かどうかのフラグ``
3060
3061         エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。
3062
3063   
3064       テーブルEntryに、ShortText型の値を格納するカラム、bodyを作成します。:
3065
3066       column_create Entry body --type ShortText
3067       [true]
3068
3069       テーブルTermに、Entryテーブルのbodyカラムの値を対象とする完全転置インデックス型カラム、entry_bodyを作成します。:
3070
3071       column_create Term entry_body COLUMN_INDEX|WITH_POSITION Entry body
3072       [true]
3073
3074   column_list
3075   名前
3076       column_list - テーブルに定義されているカラムのリスト表示
3077
3078   書式
3079       column_list table
3080
3081   説明
3082       groonga組込コマンドの一つであるcol‐
3083       umn_listについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
3084
3085       column_listはテーブルに定義されているカラムをリスト表示します。
3086
3087   引数
3088       table  カラム情報を出力するテーブルの名前を指定します。
3089
3090   返値
3091   json形式
3092       カラム名一覧を以下の形式で返却します。:
3093
3094       [[[カラム情報名1,カラム情報型1],...], カラム情報1,...]
3095
3096       カラム情報名n
3097          カラム情報n
3098          には複数の情報が含まれますが、そこに入る情報がどんな内容かを示す名前を出力します。
3099          情報名は以下の通りです。
3100
3101          id
3102              カラムオブジェクトに割り当てられたID
3103
3104          name
3105              カラム名
3106
3107          path
3108              カラム値を格納するファイル名
3109
3110          type
3111              スカラ型、ベクタ型、インデックス型の種別
3112
3113          flags
3114              カラムのflags属性
3115
3116          domain
3117              カラムの値の属する型
3118
3119          range
3120              テーブルのkeyの型
3121
3122          source
3123              インデックスカラムのとき、インデックス対象カラム名の配列
3124
3125       カラム情報型n
3126          カラム情報の型を出力します。
3127
3128       カラム情報n
3129          カラム情報名n    で示された情報の配列を出力します。     情報の順序は
3130          カラム情報名n の順序と同じです。
3131
3132   
3133       column_list Entry
3134
3135       [[["id", "UInt32"],
3136         ["name","ShortText"],
3137         ["path","ShortText"],
3138         ["type","ShortText"],
3139         ["flags","ShortText"],
3140         ["domain", "ShortText"],
3141         ["range", "ShortText"],
3142         ["source","ShortText"]],
3143        [258,
3144         "Entry.body",
3145         "test.db.0000102",
3146         "var",
3147         "COLUMN_SCALAR|COMPRESS_NONE|PERSISTENT",
3148         "Entry",
3149         "ShortText",
3150         []]]
3151
3152       注: 実際は改行が入りません。
3153
3154   column_remove
3155   名前
3156       column_remove - テーブルに定義されているカラムの削除
3157
3158   書式
3159       column_remove table name
3160
3161   説明
3162       groonga組込コマンドの一つであるcol‐
3163       umn_removeについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
3164
3165       column_removeはテーブルに定義されているカラムを削除します。
3166       また、付随するインデックスも削除されます。[#]_
3167
3168   引数
3169       table  削除対象のカラムが定義されているテーブルの名前を指定します。
3170
3171       name   削除対象のカラム名を指定します。
3172
3173   返値
3174   json形式
3175       [成功かどうかのフラグ]
3176
3177       ``成功かどうかのフラグ``
3178
3179         エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。
3180
3181   
3182       column_remove Entry body
3183
3184       [true]
3185       脚注
3186
3187       [1]  マルチセクションインデックスの一部である場合も、インデックスが削除されます。
3188
3189   define_selector
3190   名前
3191       define_selector - 検索コマンドを定義
3192
3193   書式
3194       define_selector name table [match_columns [query [filter [scorer [sortby
3195                       [output_columns [offset [limit [drilldown [drilldown_sortby
3196                       [drilldown_output_columns [drilldown_offset [drilldown_limit]]]]]]]]]]]]]
3197
3198   説明
3199       groonga組込コマンドの一つであるdefine_selec‐
3200       torについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
3201
3202       define_selec‐
3203       torは、検索条件をカスタマイズした新たな検索コマンドを定義します。
3204
3205   引数
3206       name
3207          定義するselectorコマンドの名前を指定します。
3208
3209       table
3210          検索対象のテーブルを指定します。
3211
3212       match_columns
3213          追加するselectorコマンドのmatch_col‐
3214          umns引数のデフォルト値を指定します。
3215
3216       query
3217          追加するselectorコマンドのquery引数のデフォルト値を指定します。
3218
3219       filter
3220          追加するselectorコマンドのfilter引数のデフォルト値を指定します。
3221
3222       scorer
3223          追加するselectorコマンドのscorer引数のデフォルト値を指定します。
3224
3225       sortby
3226          追加するselectorコマンドのsortby引数のデフォルト値を指定します。
3227
3228       output_columns
3229          追加するselectorコマンドのoutput_col‐
3230          umns引数のデフォルト値を指定します。
3231
3232       offset
3233          追加するselectorコマンドのoffset引数のデフォルト値を指定します。
3234
3235       limit
3236          追加するselectorコマンドのlimit引数のデフォルト値を指定します。
3237
3238       drilldown
3239          追加するselectorコマンドのdrilldown引数のデフォルト値を指定します。
3240
3241       drilldown_sortby
3242          追加するselectorコマンドのdrill‐
3243          down_sortby引数のデフォルト値を指定します。
3244
3245       drilldown_output_columns
3246          追加するselectorコマンドのdrilldown_output_col‐
3247          umns引数のデフォルト値を指定します。
3248
3249       drilldown_offset
3250          追加するselectorコマンドのdrilldown_off‐
3251          set引数のデフォルト値を指定します。
3252
3253       drilldown_limit
3254          追加するselectorコマンドのdrill‐
3255          down_limit引数のデフォルト値を指定します。
3256
3257   返値
3258   json形式
3259       [成功かどうかのフラグ]
3260
3261       ``成功かどうかのフラグ``
3262
3263         エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。
3264
3265   
3266       テーブルEntryの全レコード・全カラムの値を出力するselec‐
3267       torコマンドを定義します。:
3268
3269       define_selector entry_selector Entry
3270       [true]
3271
3272   関連項目
3273       ../expr
3274
3275   defrag
3276   名前
3277       defrag - オブジェクトにセットされたロックを解除する
3278
3279   書式
3280       defrag objname threshold
3281
3282   説明
3283       groonga組込コマンドの一つであるdefragについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
3284
3285       defragは、対象となるオブジェクト(データベースか可変長サイズカラム)を指定し、オブジェクトのフラグメンテーションを解消します。
3286
3287   引数
3288       objname
3289          対象となるオブジェクト名を指定します。空の場合、開いているdbオブジェクトが対象となります。
3290
3291   返値
3292   json形式
3293       [フラグメンテーション解消を実行したセグメントの数]
3294
3295       ``フラグメンテーション解消を実行したセグメントの数``
3296
3297         フラグメンテーション解消を実行したセグメントの数を返す。
3298
3299   
3300       開いているデータベースのフラグメンテーションを解消する:
3301
3302       defrag
3303       [300]
3304
3305       テーブル名 Entry のカラム body のフラグメンテーションを解消する:
3306
3307       defrag Entry.body
3308       [30]
3309
3310   delete
3311   名前
3312       delete - 一件のレコードの削除
3313
3314   書式
3315       delete table [key [id]]
3316
3317   説明
3318       groonga組込コマンドの一つであるdeleteについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
3319
3320       deleteは、使用しているデータベースのテーブルに1件のレコードを削除します。
3321
3322   引数
3323       table
3324          レコードを削除しようとするテーブルの名前を指定します。
3325
3326       key
3327          削除するレコードの主キー値を指定します。主キーなしのテーブルの場合はこのパラメータを指定しても無視されます(idパラメータを代わりに指定します)。
3328
3329       id
3330          レコードIDによってレコードを指定します。idパラメータを指定する場合は、keyパラメータを指定してはいけません。
3331
3332       返値 ---
3333
3334   json形式
3335       [成功かどうかのフラグ]
3336
3337       ``成功かどうかのフラグ``
3338
3339         エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。
3340
3341   
3342       テーブルEntryからレコードを削除します。:
3343
3344       delete Entry abandon
3345
3346       [true]
3347
3348   関連項目
3349       load
3350
3351   dump
3352   名前
3353       dump - データベースのスキーマとデータを出力する
3354
3355   書式
3356       dump [tables]
3357
3358   説明
3359       groonga組込コマンドの一つであるdumpについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
3360
3361       dumpはデータベースのスキーマとデータを後から読み込めるフォーマットで出力します。dumpの結果は大きくなるため、主にコマンドラインから使うことを想定しています。データベースのバックアップが主な利用方法です。
3362
3363       dumpが出力するフォーマットは直接groongaが解釈できるフォーマットです。そのため、以下のようにしてデータベースをコピーすることができます。:
3364
3365       % groonga original/db dump > dump.grn
3366       % mkdir backup
3367       % groonga -n backup/db < dump.grn
3368
3369   引数
3370       tables
3371          出力対象のテーブルを「,」(カンマ)区切りで指定します。存在しないテーブルを指定した場合は無視されます。
3372
3373   返値
3374       データベースのスキーマとデータをgroongaの組み込みコマンド呼び出し形式で出力します。out‐
3375       put_type指定は無視されます。
3376
3377   
3378       データベース内のすべてのデータを出力:
3379
3380       > dump
3381       table_create LocalNames 48 ShortText
3382       table_create Entries 48 ShortText
3383       column_create Entries local_name 0 LocalNames
3384       column_create LocalNames Entries_local_name 2 Entries local_name
3385       ...
3386       load --table LocalNames
3387       [
3388       ["_key"],
3389       ["Items"],
3390       ["BLT"],
3391       ...
3392       ]
3393       ...
3394
3395       データベース内のスキーマと特定のテーブルのデータのみ出力:
3396
3397       > dump --tables Users,Sites
3398       table_create Users TABLE_HASH_KEY ShortText
3399       column_create Users name COLUMN_SCALAR ShortText
3400       table_create Comments TABLE_PAT_KEY ShortText
3401       column_create Comments text COLUMN_SCALAR ShortText
3402       table_create Sites TABLE_NO_KEY
3403       column_create Sites url COLUMN_SCALAR ShortText
3404       load --table Users
3405       [
3406       ["_key"],
3407       ["mori"],
3408       ["yu"],
3409       ...
3410       ]
3411       load --table Sites
3412       [
3413       ["_id","url"],
3414       [1,"http://groonga.org/"],
3415       [2,"http://qwik.jp/senna/"],
3416       ...
3417       ]
3418
3419   load
3420   名前
3421       load - データのロード
3422
3423   書式
3424       load values table [columns [ifexists [input_type]]]
3425
3426   説明
3427       groonga組込コマンドの一つであるloadについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
3428
3429       loadは、使用しているデータベースのテーブルにレコードを登録し、カラムの値を更新します。
3430
3431   引数
3432       values
3433          input_typeに指定する形式で登録するレコードの値を表現した文字列を渡します。
3434
3435          input_typeがjsonである場合には、以下のいずれかの形式が使用できます。
3436
3437          形式1  [[カラム名1,   カラム名2,..],   [カラム値1,    カラム値2,..],
3438                 [カラム値1, カラム値2,..],..]
3439
3440          形式2  [{カラム名1:  カラム値1,  カラム名2:  カラム値2}, {カラム名1:
3441                 カラム値1, カラム名2: カラム値2},..]
3442
3443          形式1の[カラム名1,                         カラム名2,..]の要素はcol‐
3444          umns引数が省略された場合のみ有効です。
3445
3446          対象のテーブルが主キーを持つテーブルであった場合は、カラム名の中に'_key'(主キーを示す疑似カラム名)が含まれていなければなりません。
3447
3448          val‐
3449          ues引数が省略された場合には、括弧の対応が取れるまで標準入力からval‐
3450          uesの値を読み取ります。引数として値を指定する場合は、文字列のエスケープが必要ですが、標準入力から与える文字列はエスケープする必要がありません。
3451
3452          続きの文字列については、空白文字('
3453          ')をエスケープする必要はありません。
3454
3455       table
3456          レコードを追加しようとするテーブルの名前を指定します。
3457
3458       columns
3459          テーブルに登録するレコードに値を設定するカラム名のリストを、カンマ区切りで指定します。
3460
3461       ifexists
3462          指定した主キーに対応するレコードが既にテーブルに登録済みであった場合に実行するscript形式のgrn_expr文字列を指定します。ifex‐
3463          istsにgrn_exprが指定された場合は、式の値が真である場合に限り、その他のカラムの値が更新されます。(デフォルトはtrue)
3464
3465       input_type
3466          入力形式を指定します。JSONのみに対応しています。
3467
3468   返値
3469   JSON形式
3470       [登録件数]
3471
3472       登録件数
3473          テーブルに登録されたレコードの件数が返されます。
3474
3475   
3476       テーブルEntryにレコードを登録します。:
3477
3478       load --table Entry --input_type json --values [{\"_key\":\"abandon\",\"body\":\"放棄する\"}]
3479
3480       [1]
3481
3482       標準入力からvaluesの値を与えます。:
3483
3484       load --table Entry --input_type json
3485       [
3486       {"_key": "abbreviate", "body": "短縮する"}
3487       ]
3488
3489       [1]
3490
3491   関連項目
3492       ../expr
3493
3494   log_level
3495   名前
3496       log_level - ログ出力レベルの設定
3497
3498   書式
3499       log_level level
3500
3501   説明
3502       groonga組込コマンドの一つであるlog_levelについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
3503
3504       log_levelは、ログ出力レベルを設定します。
3505
3506   引数
3507       level
3508          設定するログ出力レベルの値を以下のいずれかで指定します。
3509              EMERG ALERT CRIT error warning notice info debug
3510
3511   返値
3512   json形式
3513       [成功かどうかのフラグ]
3514
3515       ``成功かどうかのフラグ``
3516
3517         エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。
3518
3519   
3520       log_level warning
3521       [true]
3522
3523   関連項目
3524       log_put log_reopen
3525
3526   log_put
3527   名前
3528       log_put - ログ出力
3529
3530   書式
3531       log_put level message
3532
3533   説明
3534       groonga組込コマンドの一つであるlog_putについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
3535
3536       log_putは、ログにmessageを出力します。
3537
3538   引数
3539       level
3540          設定するログ出力レベルの値を以下のいずれかで指定します。
3541              EMERG ALERT CRIT error warning notice info debug
3542
3543       message
3544          出力する文字列を指定します。
3545
3546   返値
3547   json形式
3548       [成功かどうかのフラグ]
3549
3550       ``成功かどうかのフラグ``
3551
3552         エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。
3553
3554   
3555       log_put ERROR ****MESSAGE****
3556       [true]
3557
3558   関連項目
3559       log_level log_reopen
3560
3561   log_reopen
3562   名前
3563       log_reopen - ログファイルの再読み込み
3564
3565   書式
3566       log_reopen
3567
3568   説明
3569       groonga組込コマンドの一つであるlog_reopenについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
3570
3571       log_reopenは、ログファイルを再読み込みします。
3572
3573       現在、デフォルトのログ関数を用いている場合のみに対応しています。
3574
3575   引数
3576       ありません。
3577
3578   返値
3579   json形式
3580       [成功かどうかのフラグ]
3581
3582       ``成功かどうかのフラグ``
3583
3584         エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。
3585
3586   
3587       log_reopen
3588
3589       [true]
3590
3591   log_reopenを用いたログのローテーション
3592       1. ログファイルをmvなどで移動する。
3593          ログはmvで移動された先のファイルに書き込まれる。
3594
3595       2. log_reopenコマンドを実行する。
3596
3597       3. 既存のログファイル名と同じファイル名で、新たなログファイルが作成される。
3598          今後のログは新たなログファイルに書き込まれる。
3599
3600   関連項目
3601       log_level log_put
3602
3603   quit
3604   名前
3605       quit - セッション終了
3606
3607   書式
3608       quit
3609
3610   説明
3611       groonga組込コマンドの一つであるquitについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
3612
3613       quitは、groongaプロセスとのセッションを終了します。クライアントプロセスならばgroongaプロセスとの接続を切ります。
3614
3615   引数
3616       ありません。
3617
3618   返値
3619       ありません。
3620
3621   
3622       quit
3623
3624   select
3625   名前
3626       select - テーブルの中から条件にマッチするレコードを検索して出力する
3627
3628   書式
3629       select table [match_columns [query [filter [scorer [sortby [output_columns
3630                    [offset [limit [drilldown [drilldown_sortby [drilldown_output_columns
3631                    [drilldown_offset [drilldown_limit [cache
3632                    [match_escalation_threshold [query_expansion]]]]]]]]]]]]]]]]
3633
3634   説明
3635       groonga組込コマンドの一つであるselectについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
3636
3637       selectは、使用しているデータベースのテーブルの中から条件にマッチするレコードを検索して出力します。
3638
3639   引数
3640       table
3641          検索対象のテーブルを指定します。存在しないテーブルを指定した場合はエラーになります。
3642
3643       match_columns
3644          query引数に指定する検索条件文字列でデフォルトの検索対象となるカラムを指定します。
3645              カラム名
3646
3647          カラム名の後ろに'*
3648          数値'を指定することによって、そのカラムにヒットした際のスコアに積算される重みを指定することができます。
3649              カラム名 * 重み
3650
3651          複数のカラムを'||'で結合して指定することもできます。
3652              カラム名1 * 重み1 || カラム名2 * 重み2
3653
3654          また、カラム名ではなく、検索に使用するインデックス名を指定することもできます。
3655
3656       query
3657          以下の形式の文字列によって検索条件を指定します。
3658
3659   条件式
3660       以下の条件式が使用できます。
3661
3662       文字列 全文検索条件(デフォルト検索対象カラムの値が指定された文字列を含んでいる)
3663
3664       文字列 フレーズ検索条件(デフォルト検索対象カラムの値が指定されたフレーズを含んでいる)
3665
3666       カラム名:値
3667              一致条件(カラム値 == 値)
3668
3669       カラム名:!値
3670              不一致条件(カラム値 != 値)
3671
3672       カラム名:<値
3673              比較条件(カラム値 < 値)
3674
3675       カラム名:>値
3676              比較条件(カラム値 > 値)
3677
3678       カラム名:<=値
3679              比較条件(カラム値 <= 値)
3680
3681       カラム名:>=値
3682              比較条件(カラム値 >= 値)
3683
3684       カラム名:@文字列
3685              全文検索条件(カラム値が指定された文字列を含んでいる)
3686
3687   結合演算子
3688       複数の条件式を結合するために以下の演算子が使用できます。
3689
3690       a OR b 論理和(aとbといずれかの条件がマッチする)
3691
3692       a + b  論理積(aとbの両方がマッチする)
3693
3694       a - b  aにマッチし、bにはマッチしない
3695
3696       ( )    複数の条件をまとめる
3697
3698       filter
3699          絞り込み条件をscript形式のgrn_expr文字列によって指定します。
3700
3701          query引数とfil‐
3702          ter引数をどちらも指定した場合は、両方の条件を満足するレコードのみがヒットします。どちらも指定しない場合は全件がヒットします。
3703
3704       scorer
3705          検索条件にマッチする全てのレコードに対して適用するgrn_exprをscript形式で指定します。
3706
3707          scorerは、検索処理が完了し、ソート処理が実行される前に呼び出されます。従って、各レコードのスコアを操作する式を指定しておけば、検索結果のソート順序をカスタマイズできるようになります。
3708
3709       sortby
3710          ソートキーとなるカラム名のリストをカンマ(',')区切りで指定します。:
3711
3712          [-]カラム名1, [-]カラム名2, [-]カラム名3, ...
3713
3714          カラム名1の値でソートし、値が同一である場合はカラム名2でソート、と順次比較を行いソートします。カラム名の前に
3715          -
3716          を付加した場合は降順にソートします。付加しない場合には昇順にソートします。
3717
3718          query引数またはfil‐
3719          ter引数を指定した場合はカラム名に'_score'を使えます。'_score'を指定することでスコアでソートすることができます。query引数もfil‐
3720          ter引数も指定していない状態で'_score'を指定するとエラーになります。
3721
3722       output_columns
3723          出力するカラム名のリストをカンマ(',')区切りで指定します。
3724
3725          アスタリスク('*')を指定すると、全てのカラムが指定されたものとみなされます。または、script形式のgrn_expr文字列を指定します。
3726          (デフォルトは、'_id, _key, *')
3727
3728       offset
3729          検索条件にマッチしたレコードのうち、出力対象となる最初のレコードの番号を0ベースで指定します。デフォルト値は0です。off‐
3730          setに負の値を指定した場合は、ヒットした件数         +         offset
3731          によって算出される値が指定されたものとみなされます。
3732
3733       limit
3734          検索条件にマッチしたレコードのうち、出力を行うレコードの件数を指定します。デフォルト値は10です。実際には、off‐
3735          set                             +                              limit
3736          がヒットした件数を超えない範囲でレコードが出力されます。limitに負の値を指定した場合は、ヒットした件数
3737          + limit + 1 によって算出される値が指定されたものとみなされます。
3738
3739       drilldown
3740          グループ化のキーとなるカラム名のリストをカンマ(',')区切りで指定します。検索条件にマッチした各レコードを出力したのちに、drill‐
3741          downに指定されたカラムの値が同一であるレコードをとりまとめて、それぞれについて結果レコードを出力します。
3742
3743       drilldown_sortby
3744          drill‐
3745          down条件に指定されたカラムの値毎にとりまとめられたレコードについて、ソートキーとなるカラム名のリストをカンマ(',')区切りで指定します。sortbyパラメータと同様に昇降順を指定できます。
3746
3747       drilldown_output_columns
3748          drill‐
3749          down条件に指定されたカラムの値毎にとりまとめられたレコードについて、出力するカラム名のリストをカンマ(',')区切りで指定します。
3750
3751       drilldown_offset
3752          drill‐
3753          down条件に指定されたカラムの値毎にとりまとめられたレコードについて、出力対象となる最初のレコードの番号を0ベースで指定します。デフォルト値は0です。drill‐
3754          down_offsetに負の値を指定した場合は、ヒットした件数 + drilldown_off‐
3755          setによって算出される値が指定されたものとみなされます。
3756
3757       drilldown_limit
3758          drill‐
3759          down条件に指定されたカラムの値毎にとりまとめられたレコードについて、出力を行うレコードの件数を指定します。デフォルト値は10です。実際には、drill‐
3760          down_offset                     +                    drilldown_limit
3761          がヒットした件数を超えない範囲でレコードが出力されます。drill‐
3762          down_limitに負の値を指定した場合は、ヒットした件数 + drilldown_limit
3763          + 1 によって算出される値が指定されたものとみなされます。
3764
3765       cache
3766          クエリキャッシュに関する動作を設定します。
3767              no
3768                 検索結果をクエリキャッシュに残しません。キャッシュして再利用される可能性が低いクエリに対して用います。キャッシュ容量は有限です。有効なキャッシュが多くヒットするために、このパラメータは有効です。
3769
3770       match_escalation_threshold
3771          検索の挙動をエスカレーションするかどうかの閾値を設定します。デフォルト値は0です。デフォルト値は以下のいずれかの方法で設定できます。
3772
3773              · configureの--with-match-escalation-thresholdオプション
3774
3775              · groongaコマンド起動時の--match-escalation-thresholdオプション
3776
3777              · 設定ファイル中のmatch-escalation-threshold設定項目
3778
3779          クエリのヒット件数が閾値を越えない場合は                /spec/search
3780          で説明している方法で検索方法をエスカレーションしてきます。
3781
3782       query_expansion
3783          query_expan‐
3784          sionパラメータには、queryパラメータに指定された文字列を置換(拡張)する条件となるテーブル・カラムを指定します。フォーマットは「${テーブル名}.${カラム名}」となります。指定するテーブルは文字列を主キーとするハッシュ型あるいはパトリシア木型のテーブルで、一つ以上の文字列型のカラムが定義されている必要があります。(ここでは置換テーブルと呼びます。)
3785
3786          queryパラメータに指定された文字列が、指定されたテーブルの主キーと完全一致する場合、その文字列を指定されたカラム値の文字列に置換します。queryパラメータが、空白、括弧、演算子などを含む場合は、その演算子によって区切られた文字列の単位で置換が実行されます。ダブルクォート("")で括られた範囲は、その内部に空白を含んでいても一つの置換される単位と見なされます。検索文字列と置換テーブルの主キー値との比較に際して大文字小文字等を区別したくない場合には、置換テーブルを定義する際にKEY_NOR‐
3787          MALIZEを指定します。置換後の文字列となるカラムの値には、括弧や*,
3788          ORなど、queryパラメータで利用可能な全ての演算子を指定することができます。
3789
3790   返値
3791       以下のようなjson形式で値が返却されます。
3792
3793       [[リターンコード, 処理開始時間, 処理時間], [検索結果, ドリルダウン結果]]
3794
3795       リターンコード
3796          grn_rcに対応する数値が返されます。0(GRN_SUC‐
3797          CESS)以外の場合は、続いてエラー内容を示す 文字列が返されます。
3798
3799       処理開始時間
3800          処理を開始した時間について、1970年1月1日0時0分0秒を起点とした秒数を小数で返します。
3801
3802       処理時間
3803          処理にかかった秒数を返します。
3804
3805       検索結果
3806          drilldown条件が実行される前の検索結果が以下のように出力されます。:
3807
3808          [[検索件数], [[カラム名1,カラム型1],..], 検索結果1,..]
3809
3810          検索件数
3811              検索件数が出力されます。
3812
3813          カラム名n
3814              output_col‐
3815              umnsに指定された条件に従って、対象となるカラム名が出力されます。
3816
3817          カラム型n
3818              output_col‐
3819              umnsに指定された条件に従って、対象となるカラム型が出力されます。
3820
3821          検索結果n
3822              output_columns,                                          offset,
3823              limitによって指定された条件に従って各レコードの値が出力されます。
3824
3825       drilldown結果
3826          drilldown処理の結果が以下のように出力されます。:
3827
3828          [[[件数], [[カラム名1,カラム型1],..], 検索結果1,..],..]
3829
3830          件数
3831              drilldownに指定されたカラムの値の異なり数が出力されます。
3832
3833          カラム名n
3834              drilldown_output_col‐
3835              umnsに指定された条件に従って、対象となるカラム名が出力されます。
3836
3837          カラム型n
3838              drilldown_output_col‐
3839              umnsに指定された条件に従って、対象となるカラム型が出力されます。
3840
3841          ドリルダウン結果n
3842              drilldown_output_columns,        drilldown_offset,        drill‐
3843              down_limitによって指定された条件に従って各レコードの値が出力されます。
3844
3845   
3846       テーブルEntryの全レコード・全カラムの値を出力します。:
3847
3848       select Entry
3849
3850       [[[2],[["_id", "UInt32"],["_key","ShortText"],["body","ShortText"]],[1,"abandon","放棄する"],[2,"abbreviate","短縮する"]]]
3851
3852   関連項目
3853       ../expr
3854
3855   shutdown
3856   名前
3857       shutdown - サーバプロセスの停止
3858
3859   書式
3860       shutdown
3861
3862   説明
3863       groonga組込コマンドの一つであるshut‐
3864       downについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
3865
3866       shutdownは、接続しているgroongaサーバプロセスを停止します。
3867
3868   引数
3869       ありません。
3870
3871   返値
3872       ありません。
3873
3874   
3875       shutdown
3876
3877   status
3878   名前
3879       status - groongaプロセスの状態表示
3880
3881   書式
3882       status
3883
3884   説明
3885       groonga組込コマンドの一つであるsta‐
3886       tusについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
3887
3888       sta‐
3889       tusコマンドは、groongaプロセスの状態を表示します。主にgroongaサーバプロセスに対して使用することを想定しています。
3890
3891   引数
3892       ありません。
3893
3894   返値
3895   json形式
3896       下記の項目がハッシュ形式で出力されます。
3897
3898       ``alloc_count``
3899
3900         groongaプロセスの内部でアロケートされ、まだ解放されてないメモリブロックの数を示します。groongaをbuildする際に、configureオプションで --enable-exact-alloc-countが指定されていたならば、正確な値を返します。それ以外の場合は不正確な値を返す場合があります。
3901
3902       ``starttime``
3903
3904         groongaプロセスが起動した時刻のtvsec値を返します。
3905
3906       ``uptime``
3907
3908         groongaプロセスが起動してから経過した秒数を返します。
3909
3910   
3911       status
3912       {"alloc_count":104,
3913        "starttime":1268213679,
3914        "uptime":1}
3915
3916   suggest
3917       Note   The suggest feature specification isn't stable.  The  specifica‐
3918              tion may be changed.
3919
3920   NAME
3921       suggest - returns completion, correction and/or suggestion for a query.
3922
3923   SYNOPSIS
3924       suggest types table column query [sortby [output_columns [offset [limit [frequency_threshold [conditional_probability_threshold [prefix_search]]]]]]]
3925
3926   DESCRIPTION
3927       The  suggest  command  returns completion, correction and/or suggestion
3928       for a specified query.
3929
3930       See /suggest/introduction about completion, correction and suggestion.
3931
3932   OPTIONS
3933       types  It specifies what types are returned by the suggest command.
3934
3935              Here are available types:
3936
3937                 complete
3938                        The suggest command does completion.
3939
3940                 correct
3941                        The suggest command does correction.
3942
3943                 suggest
3944                        The suggest command does suggestion.
3945
3946              You can specify one or more types  separated  by  |.   Here  are
3947              examples:
3948                 It returns correction:
3949
3950                 correct
3951
3952                 It returns correction and suggestion:
3953
3954                 correct|suggest
3955
3956                 It returns complete, correction and suggestion:
3957
3958                 complete|correct|suggest
3959
3960       table  It  specifies table name that has item_${DATA_SET_NAME}` format.
3961              For example, ``item_query is a table name if you created dataset
3962              by the following command:
3963
3964              groonga-suggest-create-dataset /tmp/db-path query
3965
3966       column It  specifies a column name that has furigana in Katakana in ta‐
3967              ble table.
3968
3969       query  It specifies query for completion, correction and/or suggestion.
3970
3971       sortby It specifies sort key.
3972
3973              Default:
3974                     -_score
3975
3976       output_columns
3977              It specifies output columns.
3978
3979              Default:
3980                     _key,_score
3981
3982       offset It specifies returned records offset.
3983
3984              Default:
3985                     0
3986
3987       limit  It specifies number of returned records.
3988
3989              Default:
3990                     10
3991
3992       frequency_threshold
3993              It specifies threshold for item frequency. Returned records must
3994              have  _score  that is greater than or equal to frequency_thresh‐
3995              old.
3996
3997              Default:
3998                     100
3999
4000       conditional_probability_threshold
4001          It specifies  threshold  for  conditional  probability.  Conditional
4002          probability  is  used  for  learned data. It is probability of query
4003          submission when query is occurred. Returned records must have condi‐
4004          tional   probability  that  is  greater  than  or  equal  to  condi‐
4005          tional_probability_threshold.
4006
4007          Default:
4008                 0.2
4009
4010       prefix_search
4011              It specifies whether optional prefix search is used  or  not  in
4012              completion.
4013
4014              Here are available values:
4015
4016                 yes    Prefix search is always used.
4017
4018                 no     Prefix search is never used.
4019
4020                 auto   Prefix  search  is  used  only when other search can't
4021                        find any records.
4022
4023              Default:
4024                     auto
4025
4026   RETURN VALUE
4027   JSON format
4028       Here is a returned JSON format:
4029
4030       {"type1": [["candidate1", score of candidate1],
4031                  ["candidate2", score of candidate2],
4032                  ...],
4033        "type2": [["candidate1", score of candidate1],
4034                  ["candidate2", score of candidate2],
4035                  ...],
4036        ...}
4037
4038       type
4039          A type specified by types.
4040
4041       candidate
4042          A candidate for completion, correction or suggestion.
4043
4044       score of candidate
4045          A score of corresponding candidate. It means that higher score  can‐
4046          didate  is  more likely candidate for completion, correction or sug‐
4047          gestion. Returned  candidates  are  sorted  by  score  of  candidate
4048          descending by default.
4049
4050   EXAMPLE
4051       Here are learned data for completion.
4052
4053       Execution example:
4054
4055       > load --table event_query --each 'suggest_preparer(_id, type, item, sequence, time, pair_query)'
4056       > [
4057       > {"sequence": "1", "time": 1312950803.86057, "item": "e"},
4058       > {"sequence": "1", "time": 1312950803.96857, "item": "en"},
4059       > {"sequence": "1", "time": 1312950804.26057, "item": "eng"},
4060       > {"sequence": "1", "time": 1312950804.56057, "item": "engi"},
4061       > {"sequence": "1", "time": 1312950804.76057, "item": "engin"},
4062       > {"sequence": "1", "time": 1312950805.86057, "item": "engine", "type": "submit"}
4063       > ]
4064       [[0,1317212843.70335,1.584911917],6]
4065
4066       Here are learned data for correction.
4067
4068       Execution example:
4069
4070       > load --table event_query --each 'suggest_preparer(_id, type, item, sequence, time, pair_query)'
4071       > [
4072       > {"sequence": "2", "time": 1312950803.86057, "item": "s"},
4073       > {"sequence": "2", "time": 1312950803.96857, "item": "sa"},
4074       > {"sequence": "2", "time": 1312950804.26057, "item": "sae"},
4075       > {"sequence": "2", "time": 1312950804.56057, "item": "saer"},
4076       > {"sequence": "2", "time": 1312950804.76057, "item": "saerc"},
4077       > {"sequence": "2", "time": 1312950805.76057, "item": "saerch", "type": "submit"},
4078       > {"sequence": "2", "time": 1312950809.76057, "item": "serch"},
4079       > {"sequence": "2", "time": 1312950810.86057, "item": "search", "type": "submit"}
4080       > ]
4081       [[0,1317212845.48948,2.003051709],8]
4082
4083       Here are learned data for suggestion.
4084
4085       Execution example:
4086
4087       > load --table event_query --each 'suggest_preparer(_id, type, item, sequence, time, pair_query)'
4088       > [
4089       > {"sequence": "3", "time": 1312950803.86057, "item": "search engine", "type": "submit"},
4090       > {"sequence": "3", "time": 1312950808.86057, "item": "web search realtime", "type": "submit"}
4091       > ]
4092       [[0,1317212847.69365,0.801326259],2]
4093
4094       Here is a completion example.
4095
4096       Execution example:
4097
4098       > suggest --table item_query --column kana --types complete --frequency_threshold 1 --query en
4099       [[0,1317212848.69611,0.00164469],{"complete":[[1],[["_key","ShortText"],["_score","Int32"]],["engine",1]]}]
4100
4101       Here is a correction example.
4102
4103       Execution example:
4104
4105       > suggest --table item_query --column kana --types correct --frequency_threshold 1 --query saerch
4106       [[0,1317212848.8995,0.00037794],{"correct":[[1],[["_key","ShortText"],["_score","Int32"]],["search",1]]}]
4107
4108       Here is a suggestion example.
4109
4110       Execution example:
4111
4112       > suggest --table item_query --column kana --types suggest --frequency_threshold 1 --query search
4113       [[0,1317212849.10158,0.000376811],{"suggest":[[2],[["_key","ShortText"],["_score","Int32"]],["search engine",1],["web search realtime",1]]}]
4114
4115       Here is a mixed example.
4116
4117       Execution example:
4118
4119       > suggest --table item_query --column kana --types complete|correct|suggest --frequency_threshold 1 --query search
4120       [[0,1317212849.30453,0.001329747],{"complete":[[2],[["_key","ShortText"],["_score","Int32"]],["search",2],["search engine",2]],"correct":[[1],[["_key","ShortText"],["_score","Int32"]],["search",2]],"suggest":[[2],[["_key","ShortText"],["_score","Int32"]],["search engine",1],["web search realtime",1]]}]
4121
4122   SEE ALSO
4123       · /suggest
4124
4125       · /executables/groonga-suggest-create-dataset
4126
4127   table_create
4128   名前
4129       table_create - テーブルの追加
4130
4131   書式
4132       table_create name [flags [key_type [value_type [default_tokenizer]]]]
4133
4134   説明
4135       groonga組込コマンドの一つであるtable_cre‐
4136       ateについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
4137
4138       table_cre‐
4139       ateコマンドは、使用しているデータベースに対してテーブルを追加します。groongaには名前付きテーブルと名前なしテーブル、永続テーブルと一時テーブルがありますが、ta‐
4140       ble_cre‐
4141       ateコマンドでは、名前付きの永続テーブルのみが作成できます。テーブルはレコードの集合であり、全てのレコードは一意なIDを持ちます。IDはレコードを追加した順序に従って自動的に付与されます。
4142
4143       テーブルにカラムを追加する時にはcolumn_cre‐
4144       ateコマンドを使用します。また、テーブルを作成した時点でいくつかの疑似カラムが使用可能になっています。
4145
4146   引数
4147       name
4148          作成するテーブルの名前を指定します。nameはデータベース内で一意な、未定義の名前でなければなりません。組込型名・組込コマンド名・組込関数名は予約済みであり、テーブル名には
4149          使用できません。また、ピリオド('.'),
4150          コロン(':')を含む名前のテーブルは作成できません。
4151
4152       flags
4153          作成するテーブルの属性を示す数値か、パイプ('|')で組み合わせたシンボル名を指定します。(デフォルト値は0(="TA‐
4154          BLE_HASH_KEY"))
4155
4156              0, TABLE_HASH_KEY
4157                     主キー値をハッシュ表で管理するテーブルを作成します。ハッシュ表を使用したテーブルでは、主キー値に完全一致するレコードを高速に検索することができます。
4158
4159              1, TABLE_PAT_KEY
4160                     主キー値をパトリシア木で管理するテーブルを作成します。パトリシア木を使用したテーブルでは、主キー値に完全一致するレコード、前方一致するレコード、および最長共通接頭辞となるレコードを高速に検索することができます。また、キー値の昇降順でレコードを取り出したり、キー値の範囲での検索を行うことができます。また、flagsの値に64を加えることによって、後方一致検索も可能となります。
4161
4162              3, TABLE_NO_KEY
4163                     主キーを持たないテーブルを作成します。各レコードはIDのみによって特定することができます。
4164
4165              4, TABLE_VIEW
4166                     複数のテーブルをまとめて操作するための仮想的なテーブル(view)を作成します。
4167
4168              64, KEY_WITH_SIS
4169                     語彙表となるパトリシア木型のテーブルにおいて、後方一致検索を可能とします。
4170
4171              128, KEY_NORMALIZE
4172                     ハッシュ表型か、パトリシア木型のテーブルにおいて、主キー値を正規化した上で登録します。この値が指定されたテーブルではたとえば、主キー値'abc'と'ABC'
4173                     は同一のレコードに対応するものとみなされます。
4174
4175       key_type
4176          主キー値の型を指定します。主キー値を持つテーブルに限り有効です。型にはgroongaの組込型か、同一データベースに定義済みのユーザ定義型、定義済みのテーブルを指定することができます。
4177
4178       value_type
4179          値の型を指定します。ta‐
4180          bleの値には固定長の型のみが指定できます。(可変長の値が必要な場合は別途カラムを作成します)
4181          型にはgroongaの組込型か、同一データベースに定義済みのユーザ定義型、またはテーブルを指定することができます。(デフォルトはvalueなし)
4182
4183       default_tokenizer
4184          作成するテーブルを語彙表として使用する場合、文字列を分割するトークナイザを指定します。
4185
4186          組込のトークナイザとして、以下が準備されています。
4187
4188          TokenDelimit
4189                 空白で区切られた文字列をトークンとする
4190
4191          TokenUnigram
4192                 unigram(1文字を1トークンとする)
4193
4194          TokenBigram
4195                 bigram(2文字の文字列要素をトークンとする)
4196
4197          TokenTrigram
4198                 trigram(3文字の文字列要素をトークンとする)
4199
4200          TokenMecab
4201                 形態素解析器mecabで解析した形態素をトークンとする。(mecabを組み込んだ場合のみ有効)
4202
4203          トークナイザが指定されなかった場合は、対象の文字列を分割せずに語彙表に登録します。
4204
4205   返値
4206   json形式
4207       [成功かどうかのフラグ]
4208
4209       ``成功かどうかのフラグ``
4210
4211         エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。
4212
4213   
4214       ShortText型の主キーを持つハッシュ表型のテーブル、Entryを作成します。:
4215
4216       table_create Entry --key_type ShortText
4217       [true]
4218
4219       Short‐
4220       Text型の主キーを持つパトリシア木型のテーブル、Termを作成します。主キー値は正規化して管理します。また、このテーブルを語彙表とする転置索引を作成する場合には、バイグラムの索引を作成します。:
4221
4222       table_create Term --flags TABLE_PAT_KEY|KEY_NORMALIZE --key_type ShortText --default_tokenizer TokenBigram
4223       [true]
4224
4225   table_list
4226   名前
4227       table_list - DBに定義されているテーブルをリスト表示
4228
4229   書式
4230       table_list
4231
4232   説明
4233       groonga組込コマンドの一つであるta‐
4234       ble_listについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
4235
4236       table_listは、DBに定義されているテーブルのリストを表示します。
4237
4238   引数
4239       ありません。
4240
4241   返値
4242   json形式
4243       テーブル名一覧が以下の形式で返却されます。:
4244
4245       [[[テーブル情報名1,テーブル情報型1],...], テーブル情報1,...]
4246
4247       テーブル情報名n
4248          テーブル情報n
4249          には複数の情報が含まれますが、そこに入る情報がどんな内容かを示す名前を出力します。
4250          情報名は以下の通りです。
4251
4252          id
4253              テーブルオブジェクトに割り当てられたID
4254
4255          name
4256              テーブル名
4257
4258          path
4259              テーブルのレコードを格納するファイル名
4260
4261          flags
4262              テーブルのflags属性
4263
4264          domain
4265              主キー値の属する型
4266
4267          range
4268              valueが属する型
4269
4270       テーブル情報型n
4271          テーブル情報の型を出力します。
4272
4273       テーブル情報n
4274          テーブル情報名n    で示された情報の配列を出力します。   情報の順序は
4275          テーブル情報名n の順序と同じです。
4276
4277   
4278       table_list Entry
4279
4280       [[["id", "UInt32"],
4281         ["name","ShortText"],
4282         ["path","ShortText"],
4283         ["flags","ShortText"],
4284         ["domain", "ShortText"],
4285         ["range","ShortText"]],
4286        [256,
4287         "Entry",
4288         "test.db.0000100",
4289         "TABLE_HASH_KEY|PERSISTENT",
4290         "ShortText",
4291         "null"],
4292        [257,
4293         "Term",
4294         "test.db.0000101",
4295         "TABLE_PAT_KEY|KEY_NORMALIZE|PERSISTENT",
4296         "ShortText",
4297         "null"]]
4298
4299       注: 実際は改行が入りません。
4300
4301   table_remove
4302   名前
4303       table_remove - テーブルの削除
4304
4305   書式
4306       table_remove table
4307
4308   説明
4309       groonga組込コマンドの一つであるta‐
4310       ble_removeについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
4311
4312       ta‐
4313       ble_removeはテーブルと定義されているカラムを削除します。カラムに付随するインデックスも再帰的に削除されます。
4314
4315   引数
4316       table  削除対象のカラムが定義されているテーブルの名前を指定します。
4317
4318   返値
4319   json形式
4320       [成功かどうかのフラグ]
4321
4322       ``成功かどうかのフラグ``
4323
4324         エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。
4325
4326   
4327       column_remove Entry body
4328
4329       [true]
4330
4331   view_add
4332   名前
4333       view_add - view型のテーブルに要素となるテーブルを追加
4334
4335   書式
4336       view_add view table
4337
4338   説明
4339       groonga組込コマンドの一つであるview_addについて説明します。組込コマンドは、groonga実行ファイルの引数、標準入力、またはソケット経由でgroongaサーバにリクエストを送信することによって実行します。
4340
4341       view_addは、view型のテーブルに要素となるテーブルを定義します。
4342
4343   引数
4344       view
4345          テーブルを追加するview型のテーブルの名前を指定します。
4346
4347       table
4348          view型のテーブルに追加されるテーブルの名前を指定します。
4349
4350   返値
4351   json形式
4352       [成功かどうかのフラグ]
4353
4354       ``成功かどうかのフラグ``
4355
4356         エラーが生じなかった場合にはtrue、エラーが生じた場合にはfalseを返す。
4357
4358   
4359       ::     view_add Ventry Entry [true]
4360
4361   データ型
4362   名前
4363       groonga データ型
4364
4365   説明
4366       groonga は、格納するデータの型を区別します。
4367
4368       groongaのデータベースでは、テーブルの主キーや、カラムの値はいずれも何らかの型に属します。また通常は、一つのテーブルの中の全てのレコードについて、カラムの値は共通となります。
4369
4370       主キーの型とカラムの型には、groongaで予め定義済みの型か、ユーザが定義する型、またはユーザが定義したテーブルを指定することができます。
4371
4372       主キーの型に他のテーブルを指定する場合は、そのテーブルは、主キーの型となるテーブルのサブセットとなります。
4373
4374       カラムの型に他のテーブルを指定する場合は、そのカラムは、カラムの型となるテーブルの参照キーとなります。
4375
4376   組込型
4377       以下の型が組込型としてあらかじめ定義されています。
4378
4379       Object
4380          任意のテーブルに属する全てのレコード [1]
4381
4382       Bool
4383          bool型。trueとfalse。
4384
4385       Int8
4386          8bit符号付き整数。
4387
4388       UInt8
4389          8bit符号なし整数。
4390
4391       Int16
4392          16bit符号付き整数。
4393
4394       UInt16
4395          16bit符号なし整数。
4396
4397       Int32
4398          32bit符号付き整数。
4399
4400       UInt32
4401          32bit符号なし整数。
4402
4403       Int64
4404          64bit符号付き整数。
4405
4406       UInt64
4407          64bit符号なし整数。
4408
4409       Float
4410          ieee754形式の64bit浮動小数点数。
4411
4412       Time
4413          1970年1月1日0時0分0秒からの経過マイクロ秒数を64bit符号付き整数で表現した値。
4414
4415       ShortText
4416          4Kbyte以下の文字列。
4417
4418       Text
4419          64Kbyte以下の文字列。
4420
4421       LongText
4422          2Gbyte以下の文字列。
4423
4424       TokyoGeoPoint
4425          日本測地系緯度経度座標。緯度と経度はミリ秒単位での整数。
4426          "経度のミリ秒x緯度のミリ秒"という文字列表現を持つ。
4427          度分秒形式であれば、x度y分z秒は(((x  *  60)  +  y)  *  60  +  z)   *
4428          1000という計算式で変換した値を代入します。
4429
4430       WGS84GeoPoint
4431          世界測地系緯度経度座標。緯度と経度はミリ秒単位での整数。
4432          "経度のミリ秒x緯度のミリ秒"という文字列表現を持つ。
4433          度分秒形式であれば、x度y分z秒は(((x   *  60)  +  y)  *  60  +  z)  *
4434          1000という計算式で変換した値を代入します。
4435
4436   型に関する制限事項
4437   テーブルの主キーに指定できない型
4438       Text型とLong‐
4439       Text型については、テーブルの主キーに指定することはできません。
4440
4441   ベクトルとして格納できない型
4442       groongaのカラムは、ある型のベクトルを保存することができます。しかし、Short‐
4443       Text,                            Text,                            Long‐
4444       Textの3つの型についてはベクトルとして保存することはできません。
4445
4446       テーブル型は、ベクトルとして格納することができます。よって、Short‐
4447       Textのベクトルを保存したい場合には、主キーがShort‐
4448       Text型のテーブルを別途作成し、そのテーブルを型として利用します。 脚注
4449
4450       [1]  Object型はv1.2でサポートされます。
4451
4452   疑似カラム (pseudo_column)
4453   名前
4454       疑似カラム
4455
4456   説明
4457       groongaのデータベースで作成したテーブルには、いくつかのカラムが自動的に定義されます。
4458
4459       これらのカラムはいずれもアンダースコア('_')で始まる名前が付与されます。定義される疑似カラムは、テーブルの種類によって異なります。
4460
4461       _id
4462          レコードに付与される一意な番号です。全てのテーブルに定義されます。値の範囲は1〜1073741824の整数で、通常はレコードを追加した順に1ずつ加算されます。_idの値は不変で、レコードが存在する限り変更することはできません。ただし、削除されたレコードの_idの値は再利用されます。
4463
4464       _key
4465          レコードの主キー値を表します。主キーを持つテーブルのみに定義されます。主キー値はテーブルの中で一意であり、変更することはできません。
4466
4467       _value
4468          レコードの値を表します。value_typeを指定したテーブルのみに定義されます。自由に変更可能です。
4469
4470       _score
4471          各レコードのスコア値を表します。検索結果として生成されたテーブルのみに定義されます。
4472
4473          検索処理を実行する過程で値が設定されますが、自由に変更可能です。
4474
4475       _nsubrecs
4476          主キーの値が同一であったレコードの件数を表します。検索結果として生成されたテーブルのみに定義されます。グループ化(drill‐
4477          down)処理を実行すると、グループ化前のテーブルにおいて、グループ化キーの値が同一であったレコードの件数が、グループ化処理の結果を格納するテーブルの_nsub‐
4478          recsに記録されます。
4479
4480   grn_expr
4481   名前
4482       grn_expr                                                              -
4483       検索条件やデータベースへの操作を表現するデータ構造(読み方:"ぐるんしき")
4484
4485   説明
4486       grn_exprは、検索条件やデータベースへの操作を表現するために使用されるデータ構造の形式です。
4487
4488       データベースの中から特定の条件を満たすレコードを取り出すために、様々な条件をand,or,notなどの演算子で結合して自由に表現することができます。grn_exprは、一連のAPI関数を呼ぶことによって組み立てることができます。特定の文字列形式には依存していません。組み込みコマンドselectのqueryパラメータでは、検索エンジンのユーザがフォームで入力する文字列を直接受け取ることを想定して、文字列からgrn_exprを生成しています。また、多くの組み込みコマンドで共通に使用するために、ECMAScript形式の文字列からgrn_exprを生成するAPI関数grn_expr_parse()を用意しています。grn_expr_parseでパースできる文字列を特にscript形式のgrn_exprと呼びます。
4489
4490       grn_exprを使うことによって非常に柔軟に検索条件を記述することができます。類似文書検索や近傍検索のような高度な検索もすべてgrn_exprによって記述できます。また、全文検索クエリにおいて、特定の文字列を含むレコードのスコアを細かく制御したり、検索結果数の多寡に応じてより検索漏れの少ないアルゴリズムで再検索するような機能も、grn_exprとgrn_ta‐
4491       ble_select()API関数を組み合わせることによって自由に定義できます。
4492
4493   script形式のgrn_expr
4494       ECMAScript風の構文で検索条件やレコードへの操作を記述します。
4495
4496       式中のIDENTIFIER(識別子)は、以下のいずれかを指します。
4497
4498       引数名 grn_exprが受け取る引数の名前
4499
4500       カラム名
4501              操作対象としているレコードのカラム名
4502
4503       型名・関数名・テーブル名
4504              データベースに定義された型・テーブル・関数の名前
4505
4506   
4507       script形式でcolumn1の値が'hoge'に等しいという条件
4508          column1 == "hoge"
4509       脚注.SS 組み込み関数一覧
4510
4511   edit_distance
4512   名前
4513       edit_distance - 指定した2つの文字列の編集距離を計算する
4514
4515   書式
4516       edit_distance(string1, string2)
4517
4518   説明
4519       groonga組込関数の一つであるedit_dis‐
4520       tanceについて説明します。組込関数は、script形式のgrn_expr中で呼び出すことができます。
4521
4522       edit_distance()
4523       関数は、string1に指定した文字列とstring2に指定した文字列の間の編集距離を求めます。
4524
4525   引数
4526       string1
4527          文字列を指定します
4528
4529       string2
4530          もうひとつの文字列を指定します
4531
4532   返値
4533       指定した2つ文字列の編集距離をUint32型の値として返します。
4534
4535   
4536       edit_distance(title, "hoge")
4537       1
4538
4539   geo_distance
4540   名前
4541       geo_distance - 指定した2点の距離を計算する
4542
4543   書式
4544       geo_distance(point1, point2)
4545
4546   説明
4547       groonga組込関数の一つであるgeo_dis‐
4548       tanceについて説明します。組込関数は、script形式のgrn_expr中で呼び出すことができます。
4549
4550       geo_distance()
4551       関数は、point1に指定した座標とpoint2に指定した座標の間の距離(近似値)を求めます。
4552       geo_distance()の他に、距離計算アルゴリズムの異なる、geo_dis‐
4553       tance2()、geo_dis‐
4554       tance3()が使用できます。それぞれ、長方形近似、球面近似、ヒュベニの距離計算式によって距離を算出します。
4555
4556   引数
4557       point1
4558          距離を求める2点のうち一つを指定します。Geo‐
4559          Point型の値を指定できます。 [1]
4560
4561       point2
4562          距離を求める2点のうちもう一つを指定します。Geo‐
4563          Point型の値、あるいは座標を示す文字列を指定できます。
4564
4565   返値
4566       指定した2点の距離をFloat型の値(単位:メートル)として返します。
4567
4568   
4569       geo_distance(pos, "150x150")
4570       100
4571       脚注
4572
4573       [1]  TokyoGeoPoint(日本測地系座標)かWGS84Geo‐
4574            Point(世界測地系座標)のいずれかを指定できます。
4575
4576   geo_in_circle
4577   名前
4578       geo_in_circle - 座標が円の範囲内に存在するかどうかを調べます。
4579
4580   書式
4581       geo_in_circle(point, center, radious_or_point)
4582
4583   説明
4584       groonga組込関数の一つであるgeo_in_cir‐
4585       cleについて説明します。組込関数は、script形式のgrn_expr中で呼び出すことができます。
4586
4587       geo_in_circle()                     関数は、pointに指定した座標が、cen‐
4588       terに指定した座標を中心とする円の範囲内にあるかどうかを調べます。
4589
4590   引数
4591       point
4592          円の範囲内に存在するかどうかを調べる座標を指定します。Point型の値を指定できます。
4593          [1]
4594
4595       center
4596          円の中心となる座標を指定します。Point型の値、あるいは座標を示す文字列を指定できます。
4597
4598       radious_or_point
4599          円の半径を指定します。数値を指定した場合には、半径(単位:メートル)が指定されたものとみなします。
4600          Point型の値、あるいは座標を示す文字列を指定した場合は、円周上の点の一つの座標が指定されたものとみなします。
4601
4602   返値
4603       pointに指定した座標が円の範囲内にあるかどうかをBool型の値で返します。
4604
4605   
4606       geo_in_circle(pos, "100x100", 100)
4607       true
4608       脚注
4609
4610       [1]  TokyoGeoPoint(日本測地系座標)かWGS84Geo‐
4611            Point(世界測地系座標)のいずれかを指定できます。
4612
4613   geo_in_rectangle
4614   名前
4615       geo_in_rectangle - 座標が矩形の範囲内に存在するかどうかを調べます。
4616
4617   書式
4618       geo_in_rectangle(point, top_left, bottom_right)
4619
4620   説明
4621       groonga組込関数の一つであるgeo_in_rectan‐
4622       gleについて説明します。組込関数は、script形式のgrn_expr中で呼び出すことができます。
4623
4624       geo_in_rectangle()        関数は、pointに指定した座標が、top_leftとbot‐
4625       tom_rightがなす矩形の範囲内にあるかどうかを調べます。
4626
4627   引数
4628       point
4629          矩形の範囲内に存在するかどうかを調べる座標を指定します。Point型の値を指定できます。
4630          [1]
4631
4632       top_left
4633          矩形の左上隅となる座標を指定します。Point型の値、あるいは座標を示す文字列を指定できます。
4634
4635       bottom_right
4636          矩形の右下隅となる座標を指定します。Point型の値、あるいは座標を示す文字列を指定できます。
4637
4638   返値
4639       pointに指定した座標が矩形の範囲内にあるかどうかをBool型の値で返します。
4640
4641   
4642       geo_in_rectangle(pos, "150x100", "100x150")
4643       true
4644       脚注
4645
4646       [1]  TokyoGeoPoint(日本測地系座標)かWGS84Geo‐
4647            Point(世界測地系座標)のいずれかを指定できます。
4648
4649   now
4650   名前
4651       now - 現在時刻を返す
4652
4653   書式
4654       now()
4655
4656   説明
4657       groonga組込関数の一つであるnowについて説明します。組込関数は、script形式のgrn_expr中で呼び出すことができます。
4658
4659       now() 関数は現在時刻に対応するTime型の値を返します。
4660
4661   返値
4662       現在時刻に対応するTime型のオブジェクトを返します。
4663
4664   
4665       now()
4666       1256791194.55541
4667
4668   rand
4669   名前
4670       rand - 乱数を生成する
4671
4672   書式
4673       rand([max])
4674
4675   説明
4676       groonga組込関数の一つであるrandについて説明します。組込関数は、script形式のgrn_expr中で呼び出すことができます。
4677
4678       rand() 関数は 0 から max の間の疑似乱数整数を返します。
4679
4680   引数
4681       max
4682          返値の最大値を指定します。省略した場合は                    RAND_MAX
4683          が指定されたものとみなされます。
4684
4685   返値
4686       0 と max の間の数を表すInt32型の値を返します。
4687
4688   
4689       rand(10)
4690       3
4691
4692   Log
4693       Groonga  has two log files. They are process log and query log. Process
4694       log is for all of executables/groonga works.  Query  log  is  just  for
4695       query processing.
4696
4697   Process log
4698       Process  log  is  enabled  by  default.  Log  path can be customized by
4699       --log-path option.  Each log has its log level. If  a  log  is  smaller
4700       than groonga process' log level, it's not logged. Log level can be cus‐
4701       tomized by -l or commands/log_level.
4702
4703   Format
4704       Process log uses the following format:
4705
4706       #{TIME_STAMP}|#{L}| #{MESSAGE}
4707
4708       TIME_STAMP
4709              It's time stamp uses the following format:
4710
4711              YYYY-MM-DD hh:mm:ss.SSSSSS
4712
4713              YYYY   Year with four digits.
4714
4715              MM     Month with two digits.
4716
4717              DD     Day with two digits.
4718
4719              hh     Hour with two digits.
4720
4721              mm     Minute with two digits.
4722
4723              ss     Second with two digits.
4724
4725              SSSSSS Microsecond with six digits.
4726
4727              Example:
4728
4729              2011-07-05 06:25:18.345734
4730
4731       L      Log level with a character. Here is a character  and  log  level
4732              map.
4733
4734              E      Emergency
4735
4736              A      Alert
4737
4738              C      Critical
4739
4740              e      Error
4741
4742              w      Warning
4743
4744              n      Notification
4745
4746              i      Information
4747
4748              d      Debug
4749
4750              -      Dump
4751
4752              Example:
4753
4754              E
4755
4756       MESSAGE
4757              Details about the log with free format.
4758
4759              Example:
4760
4761              log opened.
4762
4763       Example:
4764
4765       2011-07-05 08:35:09.276421|n| grn_init
4766       2011-07-05 08:35:09.276553|n| RLIMIT_NOFILE(4096,4096)
4767
4768   Query log
4769       Query log is disabled by default. It can be enabled by --query-log-path
4770       option.
4771
4772   Format
4773       Query log uses the following formats:
4774
4775       #{TIME_STAMP}|#{MESSAGE}
4776       #{TIME_STAMP}|#{ID}|>#{QUERY}
4777       #{TIME_STAMP}|#{ID}|:#{ELAPSED_TIME} #{PROGRESS}
4778       #{TIME_STAMP}|#{ID}|<#{ELAPSED_TIME} #{RETURN_CODE}
4779
4780       TIME_STAMP
4781              It's time stamp uses the following format:
4782
4783              YYYY-MM-DD hh:mm:ss.SSSSSS
4784
4785              YYYY   Year with four digits.
4786
4787              MM     Month with two digits.
4788
4789              DD     Day with two digits.
4790
4791              hh     Hour with two digits.
4792
4793              mm     Minute with two digits.
4794
4795              ss     Second with two digits.
4796
4797              SSSSSS Microsecond with six digits.
4798
4799              Example:
4800
4801              2011-07-05 06:25:18.345734
4802
4803       ID     ID of a thread.  Groonga  process  creates  threads  to  process
4804              requests  concurrently.  Each  thread  outputs  some  logs for a
4805              request. This ID can be used to extract  a  log  sequence  by  a
4806              thread.
4807
4808              Example:
4809
4810              45ea3034
4811
4812       >      A character that indicates query is started.
4813
4814       :      A character that indicates query is processing.
4815
4816       <      A character that indicates query is finished.
4817
4818       MESSAGE
4819              Details about the log with free format.
4820
4821              Example:
4822
4823              query log opened.
4824
4825       QUERY  A query to be processed.
4826
4827              Example:
4828
4829              select users --match_columns hobby --query music
4830
4831       ELAPSED_TIME
4832              Elapsed time in nanoseconds since query is started.
4833
4834              Example:
4835
4836              000000000075770
4837              (It means 75,770 nanoseconds.)
4838
4839       PROGRESS
4840              A processed work at the time.
4841
4842              Example:
4843
4844              select(313401)
4845              (It means that 'select' is processed and 313,401 records are remained.)
4846
4847       RETURN_CODE
4848              A return code for the query.
4849
4850              Example:
4851
4852              rc=0
4853              (It means return code is 0. 0 means GRN_SUCCESS.)
4854
4855       Example:
4856
4857       2011-07-05 06:25:19.458756|45ea3034|>select Properties --limit 0
4858       2011-07-05 06:25:19.458829|45ea3034|:000000000072779 select(19)
4859       2011-07-05 06:25:19.458856|45ea3034|:000000000099998 output(0)
4860       2011-07-05 06:25:19.458875|45ea3034|<000000000119062 rc=0
4861       2011-07-05 06:25:19.458986|45ea3034|>quit
4862

仕様

4864   検索
4865       /commands/select
4866       コマンドがqueryパラメータを使ってどのように検索するのかを説明します。
4867
4868   検索の挙動
4869       検索の挙動には以下の3種類あり、検索結果によって動的に使い分けています。
4870
4871       1. 完全一致検索
4872
4873       2. 非わかち書き検索
4874
4875       3. 部分一致検索
4876
4877       どのように検索の挙動を使い分けているかを説明する前に、まず、それぞれの検索の挙動を説明します。
4878
4879   完全一致検索
4880       検索対象文書は複数の語彙にトークナイズ(分割)され、それぞれを単位とした語彙表に索引を管理します。
4881       検索キーワードも同一の方法でトークナイズされます。
4882
4883       このとき、検索キーワードをトークナイズした結果得られる語彙の配列と同一の配列を含む文書を検索する処理を完全一致検索と呼んでいます。
4884
4885       たとえば、Token‐
4886       Mecabトークナイザを使用した索引では「東京都民」という文字列は
4887          東京 / 都民
4888
4889       という二つの語彙の配列として格納されます。この索引に対して「東京都」というキーワードで検索した時、このキーワードは、
4890          東京 / 都
4891
4892       という二つの語彙の配列として処理されます。この語彙の並びは、「東京    /
4893       都民」という語彙の並びには一致しませんので、完全一致検索ではヒットしません。
4894
4895       これに対して、TokenBi‐
4896       gramトークナイザを使用した索引では「東京都民」という文字列は
4897          東京 / 京都 / 都民 / 民
4898
4899       という四つの語彙の配列として格納されます。この索引に対して「東京都」というキーワードで検索した時、このキーワードは、
4900          東京 / 京都
4901
4902       という二つの語彙の配列として処理されます。この語彙の並びは、「東京    /
4903       京都                                                                  /
4904       都民」という語彙の並びに含まれますので、完全一致検索でヒットします。
4905
4906       なお、TokenBi‐
4907       gramトークナイザでは、アルファベット・数値・記号文字列についてはbigramを生成せず、一つの連続したトークンとして扱います。たとえば、「楽しいbil‐
4908       liard」という文字列は、
4909          楽し / しい / billiard
4910
4911       という三つの語彙の配列として格納されます。これに対して「bill」というキーワードで検索した時、このキーワードは、
4912          bill
4913
4914       という一つの語彙として処理されます。この語彙の並びは「楽し  /  しい   /
4915       bil‐
4916       liard」という語彙の並びには含まれないので、完全一致でヒットしません。
4917
4918       これに対して、TokenBigramSplitSymbolAl‐
4919       phaトークナイザではアルファベット文字列についてもbigramを生成し、「楽しいbil‐
4920       liard」という文字列は、
4921          楽し / しい / いb / bi / il / ll / li / ia / ar / rd / d
4922
4923       という十一の語彙の配列として格納されます。これに対して「bill」というキーワードで検索した時、このキーワードは、
4924          bi / il / ll
4925
4926       という三つの語彙として処理されます。この語彙の並びは「楽し / しい / いb
4927       /   bi   /   il   /   ll   /   li    /    ia    /    ar    /    rd    /
4928       d」という語彙の並びに含まれるので、完全一致でヒットします。
4929
4930   非わかち書き検索
4931       非わかち書き検索はパトリシア木で語彙表を構築している場合のみ利用可能です。
4932
4933       非わかち書き検索の挙動はTokenBi‐
4934       gramなどN-gram系のトークナイザーを利用している場合とToken‐
4935       Mecabトークナイザーを利用している場合で挙動が変わります。
4936
4937       N-gram系のトークナイザーを利用している場合はキーワードで前方一致検索をします。
4938
4939       例えば、「bill」というキーワードで検索した場合、「bill」も「bil‐
4940       liard」もヒットします。
4941
4942       Token‐
4943       MeCabトークナイザーの場合はわかち書き前のキーワードで前方一致検索をします。
4944
4945       例えば、「スープカレー」というキーワードで検索した場合、「スープカレーバー」(1単語扱い)にヒットしますが、「スープカレー」("スープ"と"カレー"の2単語扱い)や「スープカレーライス」("スープ"と"カレーライス"の2単語扱い)にはヒットしません。
4946
4947   部分一致検索
4948       部分一致検索はパトリシア木で語彙表を構築していて、かつ、KEY_WITH_SISオプションを指定している場合のみ利用可能です。KEY_WITH_SISオプションが指定されていない場合は非わかち書き検索と同等です。
4949
4950       部分一致検索の挙動はTokenBi‐
4951       gramなどN-gram系のトークナイザーを利用している場合とToken‐
4952       Mecabトークナイザーを利用している場合で挙動が変わります。
4953
4954       Bigramの場合は前方一致検索と中間一致検索と後方一致検索を行います。
4955
4956       例えば、「ill」というキーワードで検索した場合、「bill」も「bil‐
4957       liard」もヒットします。
4958
4959       Token‐
4960       MeCabトークナイザーの場合はわかち書き後のキーワードで前方一致検索と中間一致検索と後方一致検索をします。
4961
4962       例えば、「スープカレー」というキーワードで検索した場合、「スープカレー」("スープ"と"カレー"の2単語扱い)や「スープカレーライス」("スープ"と"カレーライス"の2単語扱い)、「スープカレーバー」(1単語扱い)にもヒットします。
4963
4964   検索の使い分け
4965       groongaは基本的に完全一致検索のみを行います。完全一致検索でのヒット件数が所定の閾値を超えない場合に限り、非わかち書き検索を行い、それでもヒット件数が閾値を超えない場合は部分一致検索を行います。(閾値は1がデフォルト値となっています)
4966
4967       ただし、すでに検索結果セットが存在する場合はたとえヒット件数が閾値に満たなくても完全一致検索のみを行います。
4968
4969       例えば、以下のようなクエリの場合は、それぞれの検索でヒット件数が閾値に満たない場合は完全一致検索、非わかち書き検索、部分一致検索を順に行います。:
4970
4971       select Shops --match_column description --query スープカレー
4972
4973       しかし、以下のように全文検索を行う前に検索結果セットが存在する場合は完全一致検索のみを行います。(point
4974       > 3で閾値の件数以上ヒットしている場合):
4975
4976       select Shops --filter '"point > 3 && description @ \"スープカレー\""'
4977
4978       そのため、descrip‐
4979       tionに「スープカレーライス」が含まれていても、「スープカレーライス」は「スープカレー」に完全一致しないのでヒットしません。
4980

制限事項

4982       groongaにはいくつか制限事項があります。
4983
4984   インデックス上限値
4985       1つのインデックスにおける論理上の上限値は以下のとおりです。
4986
4987       · 最大レコード数: 268,435,455 (約2億6千万)
4988
4989       · 最大語彙数: 268,435,455 (約2億6千万)
4990
4991       · 最大インデックスサイズ: 256GByte
4992
4993       (実際には他の諸条件の制約により上記の値まで到達しない場合もあります)
4994

トラブルシューティング

4996   同じ検索キーワードなのに全文検索結果が異なる
4997       同じ検索キーワードでも一緒に指定するクエリによっては全文検索の結果が異なることがあります。ここでは、その原因と対策方法を説明します。
4998
4999   
5000       まず、実際に検索結果が異なる例を説明します。
5001
5002       DDLは以下の通りです。BlogsテーブルのbodyカラムをToken‐
5003       Mecabトークナイザーを使ってトークナイズしてからインデックスを作成しています。:
5004
5005       table_create Blogs TABLE_NO_KEY
5006       column_create Blogs body COLUMN_SCALAR ShortText
5007       column_create Blogs updated_at COLUMN_SCALAR Time
5008       table_create Terms TABLE_PAT_KEY|KEY_NORMALIZE ShortText --default_tokenizer TokenMecab
5009       column_create Terms blog_body COLUMN_INDEX|WITH_POSITION Blogs body
5010
5011       テスト用のデータは1件だけ投入します。:
5012
5013       load --table Blogs
5014       [
5015         ["body", "updated_at"],
5016         ["東京都民に深刻なダメージを与えました。", "2010/9/21 10:18:34"],
5017       ]
5018
5019       まず、全文検索のみで検索します。この場合ヒットします。:
5020
5021       > select Blogs --filter 'body @ "東京都"'
5022       [[0,4102.268052438,0.000743783],[[[1],[["_id","UInt32"],["updated_at","Time"],["body","ShortText"]],[1,1285031914.0,"東京都民に深刻なダメージを与えました。"]]]]
5023
5024       続いて、範囲指定と全文検索を組み合わせて検索します(1285858800は2010/10/1
5025       0:0:0の秒表記)。この場合もヒットします。:
5026
5027       > select Blogs --filter 'body @ "東京都" && updated_at < 1285858800'
5028       [[0,4387.524084839,0.001525487],[[[1],[["_id","UInt32"],["updated_at","Time"],["body","ShortText"]],[1,1285031914.0,"東京都民に深刻なダメージを与えました。"]]]]
5029
5030       最後に、範囲指定と全文検索の順番を入れ替えて検索します。個々の条件は同じですが、この場合はヒットしません。:
5031
5032       > select Blogs --filter 'updated_at < 1285858800 && body @ "東京都"'
5033       [[0,4400.292570838,0.000647716],[[[0],[["_id","UInt32"],["updated_at","Time"],["body","ShortText"]]]]]
5034
5035       どうしてこのような挙動になるかを説明します。
5036
5037   原因
5038       このような挙動になるのは全文検索時に複数の検索の挙動を使い分けているからです。ここでは簡単に説明するので、詳細は
5039       /spec/search を参照してください。
5040
5041       検索の挙動には以下の3種類があります。
5042
5043       1. 完全一致検索
5044
5045       2. 非わかち書き検索
5046
5047       3. 部分一致検索
5048
5049       groongaは基本的に完全一致検索のみを行います。上記の例では「東京都民に深刻なダメージを与えました。」を「東京都」というクエリで検索していますが、Token‐
5050       Mecabトークナイザーを使っている場合はこのクエリはマッチしません。
5051
5052       検索対象の「東京都民に深刻なダメージを与えました。」は
5053          東京 / 都民 / に / 深刻 / な / ダメージ / を / 与え / まし / た / 。
5054
5055       とトークナイズされますが、クエリの「東京都」は
5056          東京 / 都
5057
5058       とトークナイズされるため、完全一致しません。
5059
5060       groongaは完全一致検索した結果のヒット件数が所定の閾値を超えない場合に限り、非わかち書き検索を行い、それでもヒット件数が閾値を超えない場合は部分一致検索を行います(閾値は1がデフォルト値となっています)。このケースのデータは部分一致検索ではヒットするので、「東京都」クエリのみを指定するとヒットします。
5061
5062       しかし、以下のように全文検索前にすでに閾値が越えている場合(「updated_at
5063       <
5064       1285858800」で1件ヒットし、閾値を越える)は、たとえ完全一致検索で1件もヒットしない場合でも部分一致検索などを行いません。:
5065
5066       select Blogs --filter 'updated_at < 1285858800 && body @ "東京都"'
5067
5068       そのため、条件の順序を変えると検索結果が変わるという状況が発生します。以下で、この情報を回避する方法を2種類紹介しますが、それぞれトレードオフとなる条件があるので採用するかどうかを十分検討してください。
5069
5070   対策方法1: トークナイザーを変更する
5071       Token‐
5072       Mecabトークナイザーは事前に準備した辞書を用いてトークナイズするため、再現率よりも適合率を重視したトークナイザーと言えます。一方、Token‐
5073       Bi‐
5074       gramなど、N-gram系のトークナイザーは適合率を重視したトークナイザーと言えます。例えば、Token‐
5075       Mecabの場合「東京都」で「京都」に完全一致することはありませんが、Token‐
5076       Bigramでは完全一致します。一方、Token‐
5077       Mecabでは「東京都民」に完全一致しませんが、TokenBi‐
5078       gramでは完全一致します。
5079
5080       このようにN-gram系のトークナイザーを指定することにより再現率をあげることができますが、適合率が下がり検索ノイズが含まれる可能性が高くなります。この度合いを調整するためには
5081       /commands/select                                           のmatch_col‐
5082       umnsで使用する索引毎に重み付けを指定します。
5083
5084       ここでも、前述の例を使って具体例を示します。まず、TokenBi‐
5085       gramを用いた索引を追加します。:
5086
5087       table_create Bigram TABLE_PAT_KEY|KEY_NORMALIZE ShortText --default_tokenizer TokenBigram
5088       column_create Bigram blog_body COLUMN_INDEX|WITH_POSITION Blogs body
5089
5090       この状態でも以前はマッチしなかったレコードがヒットするようになります。:
5091
5092       > select Blogs --filter 'updated_at < 1285858800 && body @ "東京都"'
5093       [[0,7163.448064902,0.000418127],[[[1],[["_id","UInt32"],["updated_at","Time"],["body","ShortText"]],[1,1285031914.0,"東京都民に深刻なダメージを与えました。"]]]]
5094
5095       しかし、N-gram系のトークナイザーの方がToken‐
5096       Mecabトークナイザーよりも語のヒット数が多いため、N-gram系のヒットスコアの方が重く扱われてしまいます。N-gram系のトークナイザーの方がToken‐
5097       Mecabトークナイザーよりも適合率の低い場合が多いので、このままでは検索ノイズが上位に表示される可能性が高くなります。
5098
5099       そこで、TokenMecabトークナイザーを使って作った索引の方をTokenBi‐
5100       gramトークナイザーを使って作った索引よりも重視するように重み付けを指定します。これは、match_col‐
5101       umnsオプションで指定できます。:
5102
5103       > select Blogs --match_columns 'Terms.blog_body * 10 || Bigram.blog_body * 3' --query '東京都' --output_columns '_score, body'
5104       [[0,8167.364602632,0.000647003],[[[1],[["_score","Int32"],["body","ShortText"]],[13,"東京都民に深刻なダメージを与えました。"]]]]
5105
5106       この場合はスコアが11になっています。内訳は、Terms.blog_body索引(Token‐
5107       Mecabトークナイザーを使用)でマッチしたので10、Bigram.blog_body索引(Token‐
5108       Bi‐
5109       gramトークナイザーを使用)でマッチしたので3、これらを合計して13になっています。このようにToken‐
5110       Mecabトークナイザーの重みを高くすることにより、検索ノイズが上位にくることを抑えつつ再現率を上げることができます。
5111
5112       この例は日本語だったのでTokenBi‐
5113       gramトークナイザーでよかったのですが、アルファベットの場合はTokenBi‐
5114       gramSplitSymbolAl‐
5115       phaトークナイザーなども利用する必要があります。例えば、「楽しいbil‐
5116       liard」はTokenBigramトークナイザーでは
5117          楽し / しい / billiard
5118
5119       となり、「bill」では完全一致しません。一方、TokenBigramSplitSymbolAl‐
5120       phaトークナイザーを使うと
5121          楽し / しい / いb / bi / il / ll / li / ia / ar / rd / d
5122
5123       となり、「bill」でも完全一致します。
5124
5125       TokenBigramSplitSymbolAl‐
5126       phaトークナイザーを使う場合も重み付けを考慮する必要があることはかわりありません。
5127
5128       利用できるバイグラム系のトークナイザーの一覧は以下の通りです。
5129
5130       · TokenBigram:
5131         バイグラムでトークナイズする。連続する記号・アルファベット・数字は一語として扱う。
5132
5133       · TokenBigramSplitSymbol:
5134         記号もバイグラムでトークナイズする。連続するアルファベット・数字は一語として扱う。
5135
5136       · TokenBigramSplitSymbolAlpha:
5137         記号とアルファベットもバイグラムでトークナイズする。連続する数字は一語として扱う。
5138
5139       · TokenBigramSplitSymbolAlphaDigit:
5140         記号・アルファベット・数字もバイグラムでトークナイズする。
5141
5142       · TokenBigramIgnoreBlank:
5143         バイグラムでトークナイズする。連続する記号・アルファベット・数字は一語として扱う。空白は無視する。
5144
5145       · TokenBigramIgnoreBlankSplitSymbol:
5146         記号もバイグラムでトークナイズする。連続するアルファベット・数字は一語として扱う。空白は無視する。
5147
5148       · TokenBigramIgnoreBlankSplitSymbolAlpha:
5149         記号とアルファベットもバイグラムでトークナイズする。連続する数字は一語として扱う。空白は無視する。
5150
5151       · TokenBigramIgnoreBlankSplitSymbolAlphaDigit:
5152         記号・アルファベット・数字もバイグラムでトークナイズする。空白は無視する。
5153
5154   対策方法2: 閾値をあげる
5155       非わかち書き検索・部分一致検索を利用するかどうかの閾値は--with-match-esca‐
5156       lation-threshold                                                config‐
5157       ureオプションで変更することができます。以下のように指定すると、100件以下のヒット数であれば、たとえ完全一致検索でヒットしても、非わかち書き検索・部分一致検索を行います。:
5158
5159       % ./configure --with-match-escalation-threashold=100
5160
5161       この場合も対策方法1同様、検索ノイズが上位に現れる可能性が高くなることに注意してください。検索ノイズが多くなった場合は指定する値を低くする必要があります。
5162

HOW TO CONTRIBUTE TO GROONGA

5164       We are welcome to you contribute the groonga project.  There  are  many
5165       ways  to  contribute such as use, introduction, bug report, development
5166       and documentation.
5167
5168       Use:   Please read this document.
5169
5170       Introduction:
5171              Please talk your friends about groonga.
5172
5173       Bug report, development and documentation:
5174              We describe about them in this section.
5175
5176   How to report a bug
5177       We have two issue tracking systems, Redmine and GitHub  issue  tracker.
5178       Redmine  is  for  Japanese and GitHub issue tracker is for English. You
5179       can use both of them to report a bug.
5180
5181   groonga開発者向け情報
5182   groonga 通信アーキテクチャ
5183   gqtpでのアーキテクチャ
5184       · comが外部からの接続を受け付ける。
5185
5186       · comは1スレッド。
5187
5188       · comがedgeを作る。
5189
5190       · edgeは接続と1対1対応。
5191
5192       · edgeはctxを含む。
5193
5194       · workerはthreadと1対1対応。
5195
5196       · workerは上限が個定数。
5197
5198       · workerは、1つのedgeと結びつくことができる。
5199
5200       · edgeごとにqueueを持つ。
5201
5202       · msgはcomによって、edgeのqueueにenqueueされる。
5203         edgeがworkerに結びついていないときは、同時に、ctx_newというqueueに、msgをenqueueした対象のedgeをenqueueする。
5204
5205   ドキュメント作成
5206   Sphinxのインストール
5207       groongaのドキュメントは、Sphinxというツールを用いて作成されています。Sphinxは以下のように導入します。:
5208
5209       # aptitude install python-setuptools
5210       # easy_install -U sphinx
5211
5212   htmlの作成
5213       以下のコマンドでhtmlが作成されます。:
5214
5215       % make html
5216
5217   pdfの作成
5218       groongaのドキュメントは、pdf出力することもできます。rst2pdfと、IPAフォント(IPA
5219       Gothic/IPAexGothic)が必要となります。
5220
5221   rst2pdfのインストール
5222       以下のようにしてインストールできます。:
5223
5224       # easy_install rst2pdf
5225
5226   pdfの作成
5227       以下のコマンドでpdfが作成されます。:
5228
5229       % make pdf
5230
5231   クエリの実現
5232       groongaのデータベースには大量のデータを格納し、その中から必要な部分を高速に取り出すことができます。必要な部分をgroongaのデータベースに問い合わせるためのクエリの表現と実行に関して、groongaは複数の手段を用意しています。
5233
5234   クエリ実行のためのインタフェース
5235       groongaは低機能で単純なライブラリインタフェースから、高機能で複雑なコマンドインタフェースまでいくつかの階層的なインタフェースをユーザプログラムに提供しています。
5236
5237       クエリ実行のためのインタフェースも階層的なインタフェースのそれぞれに対応する形で用意されています。以下に低レイヤなインタフェースから順に説明します。
5238
5239   DB_API
5240       DB_APIは、groongaデータベースを操作するための一群のC言語向けAPI関数を提供します。DB_APIはデータベースを構成する個々の部分に対する単純な操作関数を提供します。DB_APIの機能を組み合わせることによって複雑なクエリを実行することができます。後述のすべてのクエリインタフェースはDB_APIの機能を組み合わせることによって実現されています。
5241
5242   grn_expr
5243       grn_exprは、groongaデータベースに対する検索処理や更新処理のための条件を表現するためのデータ構造で、複数の条件を再帰的に組み合わせてより複雑な条件を表現することができます。grn_exprによって表現されたクエリを実行するためには、grn_ta‐
5244       ble_select()関数を使用します。
5245
5246   groonga実行ファイル
5247       groongaデータベースを操作するためのコマンドインタープリタです。渡されたコマンドを解釈し、実行結果を返します。コマンドの実処理はC言語で記述されます。ユーザがC言語で定義した関数を新たなコマンドとしてgroonga実行ファイルに組み込むことができます。各コマンドはいくつかの文字列引数を受け取り、これをクエリとして解釈して実行します。引数をgrn_exprとして解釈するか、別の形式として解釈してDB_APIを使ってデータベースを操作するかはコマンド毎に自由に決めることができます。
5248
5249   grn_exprで表現できるクエリ
5250       grn_exprは代入や関数呼び出しのような様々な操作を表現できますが、この中で検索クエリを表現するgrn_exprのことを特に条件式とよびます。条件式を構成する個々の要素を関係式と呼びます。条件式は一個以上の関係式か、あるいは条件式を論理演算子で結合したものです。
5251
5252       論理演算子は、以下の3種類があります。
5253
5254       && (論理積)
5255       || (論理和)
5256       !  (否定)
5257
5258       関係式は、下記の11種類が用意されています。また、ユーザが定義した関数を新たな関係式として使うこともできます。
5259
5260       equal(==)
5261       not_equal(!=)
5262       less(<)
5263       greater(>)
5264       less_equal(<=)
5265       greater_equal(>=)
5266       contain()
5267       near()
5268       similar()
5269       prefix()
5270       suffix()
5271
5272   grn_table_select()
5273       grn_ta‐
5274       ble_select()関数は、grn_exprで表現された検索クエリを実行するときに使います。引数として、検索対象となるテーブル、クエリを表すgrn_expr、検索結果を格納するテーブル、それに検索にマッチしたレコードを検索結果にどのように反映するかを指定する演算子を渡します。演算子と指定できるのは下記の4種類です。
5275
5276       GRN_OP_OR
5277       GRN_OP_AND
5278       GRN_OP_BUT
5279       GRN_OP_ADJUST
5280
5281       GRN_OP_ORは、検索対象テーブルの中からクエリにマッチするレコードを検索結果テーブルに加えます。GRN_OP_OR以外の演算子は、検索結果テーブルが空でない場合にだけ意味を持ちます。GRN_OP_ANDは、検索結果テーブルの中からクエリにマッチしないレコードを取り除きます。GRN_OP_BUTは、検索結果テーブルの中からクエリにマッチするレコードを取り除きます。GRN_OP_ADJUSTは、検索結果テーブルの中でクエリにマッチするレコードに対してスコア値の更新のみを行います。
5282
5283       grn_ta‐
5284       ble_select()は、データベース上に定義されたテーブルや索引などを組み合わせて可能な限り高速に指定されたクエリを実行しようとします。
5285
5286   関係式
5287       関係式は、検索しようとしているデータが満たすべき条件を、指定した値の間の関係として表現します。いずれの関係式も、その関係が成り立ったときに評価されるcall‐
5288       back、コールバック関数に渡されるargとを引数として指定することができます。call‐
5289       backが与えられず、argのみが数値で与えられた場合はスコア値の係数とみなされます。主な関係式について説明します。
5290
5291   equal(v1, v2, arg, callback)
5292       v1の値とv2の値が等しいことを表します。
5293
5294   not_equal(v1, v2, arg, callback)
5295       v1の値とv2の値が等しくないことを表します。
5296
5297   less(v1, v2, arg, callback)
5298       v1の値がv2の値よりも小さいことを表します。
5299
5300   greater(v1, v2, arg, callback)
5301       v1の値がv2の値よりも大きいことを表します。
5302
5303   less_equal(v1, v2, arg, callback)
5304       v1の値がv2の値と等しいか小さいことを表します。
5305
5306   greater_equal(v1, v2, arg, callback)
5307       v1の値がv2の値と等しいか大きいことを表します。
5308
5309   contain(v1, v2, mode, arg, callback)
5310       v1の値がv2の値を含んでいることを表します。また、v1の値が要素に分解されるとき、それぞれの要素に対して二つ目の要素が一致するためのmodeとして下記のいずれかを指定することができます。
5311
5312       EXACT: v2の値もv1の値と同様に要素に分解したとき、それぞれの要素が完全に一致する(デフォルト)
5313       UNSPLIT: v2の値は要素に分解しない
5314       PREFIX: v1の値の要素がv2の値に前方一致する
5315       SUFFIX: v1の値の要素がv2の値に後方一致する
5316       PARTIAL: v1の値の要素がv2の値に中間一致する
5317
5318   near(v1, v2, arg, callback)
5319       v1の値の中に、v2の値の要素が接近して含まれていることを表します。(v2には値の配列を渡します)
5320
5321   similar(v1, v2, arg, callback)
5322       v1の値とv2の値が類似していることを表します。
5323
5324   prefix(v1, v2, arg, callback)
5325       v1の値がv2の値に対して前方一致することを表します。
5326
5327   suffix(v1, v2, arg, callback)
5328       v1の値がv2の値に対して後方一致することを表します。
5329
5330   クエリの実例
5331       grn_exprを使って様々な検索クエリを表現することができます。
5332
5333   検索例1
5334       GRN_EXPR_CREATE_FOR_QUERY(ctx, table, query, var);
5335       grn_expr_append_obj(ctx, query, contain, GRN_OP_PUSH, 1);
5336       grn_expr_append_obj(ctx, query, column, GRN_OP_PUSH, 1);
5337       grn_expr_append_const(ctx, query, string, GRN_OP_PUSH, 1);
5338       grn_expr_append_op(ctx, query, GRN_OP_CALL, 3);
5339       result = grn_table_select(ctx, table, query, NULL, GRN_OP_OR);
5340
5341       tableのcolumnの値がstringを含むレコードをresultに返します。col‐
5342       umnの値が'needle          in          haystack'であるレコードr1と、col‐
5343       umnの値が'haystack'であるレコードr2がta‐
5344       bleに登録されていたとき、stringに'nee‐
5345       dle'を指定したなら、レコードr1のみがヒットします。
5346
5347   検索例2
5348       GRN_EXPR_CREATE_FOR_QUERY(ctx, table, query, var);
5349       grn_expr_append_obj(ctx, query, contain, GRN_OP_PUSH, 1);
5350       grn_expr_append_obj(ctx, query, column1, GRN_OP_PUSH, 1);
5351       grn_expr_append_const(ctx, query, string, GRN_OP_PUSH, 1);
5352       grn_expr_append_const(ctx, query, exact, GRN_OP_PUSH, 1);
5353       grn_expr_append_const(ctx, query, score1, GRN_OP_PUSH, 1);
5354       grn_expr_append_op(ctx, query, GRN_OP_CALL, 5);
5355       result = grn_table_select(ctx, table, query, NULL, GRN_OP_OR);
5356       grn_obj_close(ctx, query);
5357       GRN_EXPR_CREATE_FOR_QUERY(ctx, table, query, var);
5358       grn_expr_append_obj(ctx, query, contain, GRN_OP_PUSH, 1);
5359       grn_expr_append_obj(ctx, query, column2, GRN_OP_PUSH, 1);
5360       grn_expr_append_const(ctx, query, string, GRN_OP_PUSH, 1);
5361       grn_expr_append_const(ctx, query, exact, GRN_OP_PUSH, 1);
5362       grn_expr_append_const(ctx, query, score2, GRN_OP_PUSH, 1);
5363       grn_expr_append_op(ctx, query, GRN_OP_CALL, 5);
5364       grn_table_select(ctx, table, query, result, GRN_OP_ADJUST);
5365       grn_obj_close(ctx, query);
5366
5367       tableのcol‐
5368       umn1の値がstringにexactモードでヒットするレコードについて得られるスコア値にscore1を積算してresultにセットします。次に、resultにセットされたレコードのうち、col‐
5369       umn2の値がstringにexactモードでヒットするレコードについては、得られたスコア値にscore2を積算したものを、元のスコア値に加えます。
5370
5371   検索例3
5372       GRN_EXPR_CREATE_FOR_QUERY(ctx, table, query, var);
5373       grn_expr_append_obj(ctx, query, contain, GRN_OP_PUSH, 1);
5374       grn_expr_append_obj(ctx, query, column1, GRN_OP_PUSH, 1);
5375       grn_expr_append_const(ctx, query, string, GRN_OP_PUSH, 1);
5376       grn_expr_append_const(ctx, query, exact, GRN_OP_PUSH, 1);
5377       grn_expr_append_const(ctx, query, score1, GRN_OP_PUSH, 1);
5378       grn_expr_append_op(ctx, query, GRN_OP_CALL, 5);
5379       result = grn_table_select(ctx, table, query, NULL, GRN_OP_OR);
5380       grn_obj_close(ctx, query);
5381       if (grn_table_size(ctx, result) < t1) {
5382         GRN_EXPR_CREATE_FOR_QUERY(ctx, table, query, var);
5383         grn_expr_append_obj(ctx, query, contain, GRN_OP_PUSH, 1);
5384         grn_expr_append_obj(ctx, query, column1, GRN_OP_PUSH, 1);
5385         grn_expr_append_const(ctx, query, string, GRN_OP_PUSH, 1);
5386         grn_expr_append_const(ctx, query, partial, GRN_OP_PUSH, 1);
5387         grn_expr_append_const(ctx, query, score2, GRN_OP_PUSH, 1);
5388         grn_expr_append_op(ctx, query, GRN_OP_CALL, 3);
5389         grn_table_select(ctx, table, query, result, GRN_OP_OR);
5390         grn_obj_close(ctx, query);
5391       }
5392
5393       tableのcol‐
5394       umn1の値がstringにexactモードでヒットするレコードについて得られるスコア値にscore1を積算してresultにセットします。得られた検索結果数がt1よりも小さい場合は、par‐
5395       tialモードで再度検索し、ヒットしたレコードについて得られるスコア値にscore2を積算してresultに追加します。
5396
5397   検索例4
5398       GRN_EXPR_CREATE_FOR_QUERY(ctx, table, query, var);
5399       grn_expr_append_obj(ctx, query, contain, GRN_OP_PUSH, 1);
5400       grn_expr_append_const(ctx, query, string, GRN_OP_PUSH, 1);
5401       grn_expr_append_obj(ctx, query, column, GRN_OP_PUSH, 1);
5402       grn_expr_append_op(ctx, query, GRN_OP_CALL, 3);
5403       result = grn_table_select(ctx, table, query, NULL, GRN_OP_OR);
5404
5405       tableのcolumnの値がstringに含まれるレコードをresultに返します。    col‐
5406       umnの値が'needle'であるレコードr1と、col‐
5407       umnの値が'haystack'であるレコードr2がta‐
5408       bleに登録されていたとき、stringに'hay                                in
5409       haystack'を指定したなら、レコードr2のみがヒットします。
5410
5411   テスト方法
5412   テスト環境の構築
5413   Cutterのインストール
5414       groongaは、テストのフレームワークとして Cutter を用いています。
5415
5416       Cutterのインストール方法は プラットフォーム毎のCutterのインストール方法
5417       をご覧下さい。
5418
5419   lcovのインストール
5420       カバレッジ情報を計測するためには、lcov
5421       1.6以上が必要です。DebianやUbuntuでは以下のようにしてインストールできます。:
5422
5423       % sudo aptitude install -y lcov
5424
5425   clangのインストール
5426       ソースコードの静的解析を行うためには、clang(scan-build)をインストールする必要があります。DebianやUbuntuでは以下のようにしてインストールできます。:
5427
5428       % sudo aptitude install -y clang
5429
5430   libmemcachedのインストール
5431       memcachedのバイナリプロトコルのテストを動作させるためには、libmem‐
5432       cachedの導入が必要です。squeeze以降のDebianやKarmic以降のUub‐
5433       ntuでは以下の用にしてインストールできます。:
5434
5435       % sudo aptitude install -y libmemcached-dev
5436
5437   テストの動作
5438       groongaのトップディレクトリで、以下のコマンドを実行します。:
5439
5440       make check
5441
5442   カバレッジ情報
5443       groongaのトップディレクトリで、以下のコマンドを実行します。:
5444
5445       make coverage
5446
5447       すると、cover‐
5448       ageディレクトリ以下に、カバレッジ情報が入ったhtmlが出力されます。
5449
5450       カバレッジには、Lines/Func‐
5451       tions/Branchesの3つの対象があります。それぞれ、行/関数/分岐に対応します。Func‐
5452       tionsがもっとも重要な対象です。すべての関数がテストされるようになっていることを心がけてください。
5453
5454       テストがカバーしていない部分の編集は慎重に行ってください。また、テストがカバーしている部分を増やすことも重要です。
5455
5456   様々なテスト
5457       テストは、test/unitディレクトリにおいて、./run-test.shを実行することによっても行えます。run-test.shはいくつかのオプションをとります。詳細は、./run-test.sh
5458       --helpを実行しヘルプをご覧ください。
5459
5460   特定のテスト関数のみテストする
5461       特定のテスト関数(Cut‐
5462       terではテストと呼ぶ)のみをテストすることができます。
5463
5464       実行例:
5465
5466       % ./run-test.sh -n test_text_otoj
5467
5468   特定のテストファイルのみテストする
5469       特定のテストファイル(Cut‐
5470       terではテストケースと呼ぶ)のみテストすることができます。
5471
5472       実行例:
5473
5474       % ./run-test.sh -t test_string
5475
5476   不正メモリアクセス・メモリリーク検出
5477       環境変数CUTTER_CHECK_LEAKをyesと設定すると、val‐
5478       grindを用いて不正メモリアクセスやメモリリークを検出しつつ、テストを動作させることができます。
5479
5480       run-test.shのみならず、make checkでも利用可能です。
5481
5482       実行例:
5483
5484       % CUTTER_CHECK_LEAK=yes make check
5485
5486   デバッガ上でのテスト実行
5487       環境変数CUT‐
5488       TER_DEBUGをyesと設定すると、テストが実行できる環境が整ったgdbが実行されます。gdb上でrunを行うと、テストの実行が開始されます。
5489
5490       run-test.shのみならず、make checkでも利用可能です。
5491
5492       実行例:
5493
5494       % CUTTER_DEBUG=yes make check
5495
5496   静的解析
5497       scan-buildを用いて、ソースコードの静的解析を行うことができます。scan_buildというディレクトリに解析結果のhtmlが出力されます。:
5498
5499       % scan-build ./configure --prefix=/usr
5500       % make clean
5501       % scan-build -o ./scan_build make -j4
5502
5503       configureは1度のみ実行する必要があります。
5504
5505   How to contribute in documentation topics
5506       We use Sphinx for documentation tool.
5507
5508   C API
5509       We  still have C API documentation in include/groonga.h. But we want to
5510       move them into doc/source/c-api/*.txt. We welcome to  you  help  us  by
5511       moving C API documentation.
5512
5513       We will use the C domain markup of Sphinx.
5514
5515   I18N
5516       We  only had documentation in Japanese.  We start to support I18N docu‐
5517       mentation by gettext based Sphinx I18N feature.  We'll use  English  as
5518       base  language and translate English into other languages such as Japa‐
5519       nese. We'll put all documentations into doc/source/ and process them by
5520       Sphinx.
5521
5522       But  we still use Japanese in doc/source/ for now. We need to translate
5523       Japanese documentation in doc/source/ into English. We welcome  to  you
5524       help us by translating documentation.
5525
5526   Translation flow
5527       After doc/source/*.txt are updated, we can start translation.
5528
5529       Here is a translation flow:
5530
5531       1. Clone groonga repository.
5532
5533       2. Update .po files.
5534
5535       3. Edit .po files.
5536
5537       4. Generate HTML files.
5538
5539       5. Confirm HTML output.
5540
5541       6. Repeat 2.-4. until you get good result.
5542
5543       7. Send your works to us!
5544
5545       Here  are  command  lines  to  do  the  above  flow. Following sections
5546       describes details.
5547
5548       # Please fork https://github.com/groonga/groonga on GitHub
5549       % git clone https://github.com/${YOUR_GITHUB_ACCOUNT}/groonga.git
5550       % ./autogen.sh
5551       % ./configure
5552       % cd doc/locale/${LANGUAGE}/LC_MESSAGES # ${LANGUAGE} is language code such as 'ja'.
5553       % make update # *.po are updated
5554       % editor *.po # translate *.po # you can use your favorite editor
5555       % cd ..
5556       % make html
5557       % browser html/index.html # confirm translation
5558       % git add LC_MESSAGES/*.po
5559       % git commit
5560       % git push
5561
5562   How to clone groonga repository
5563       First, please fork  groonga  repository  on  GitHub.  You  just  access
5564       https://github.com/groonga/groonga  and  press Fork button. Now you can
5565       clone your groonga repository:
5566
5567       % git clone https://github.com/${YOUR_GITHUB_ACCOUNT}/groonga.git
5568
5569       Then you need to configure your cloned repository:
5570
5571       % cd groonga
5572       % ./autogen.sh
5573       % ./configure
5574
5575       The above steps are just needed at the first setup.
5576
5577       If you have troubles on the above  steps,  you  can  use  source  files
5578       available on http://packages.groonga.org/source/groonga/ .
5579
5580   How to update .po files
5581       You  can  update  .po files by running make update on doc/locale/${LAN‐
5582       GUAGE}/LC_MESSAGES. (Please substitute ${LANGUAGE} with  your  language
5583       code such as 'ja'.):
5584
5585       % cd doc/locale/ja/LC_MESSAGES
5586       % make update
5587
5588   How to edit .po
5589       There are some tools to edit .po files. .po files are just text. So you
5590       can use your favorite editor. Here is a specialized editor for .po file
5591       edit list.
5592
5593       Emacs's po-mode
5594              It is bundled in gettext.
5595
5596       Poedit It is a .po editor and works on many platform.
5597
5598       gted   It is also a .po editor and is implemented as Eclipse plugin.
5599
5600   How to generate HTML files
5601       You can generate HTML files with updated .po files by running make html
5602       on doc/locale/${LANGUAGE}. (Please  substitute  ${LANGUAGE}  with  your
5603       language code such as 'ja'.):
5604
5605       % cd doc/locale/ja/
5606       % make html
5607
5608       You can also generate HTML files for all languages by running make html
5609       on doc/locale:
5610
5611       % cd doc/locale
5612       % make html
5613
5614       Note   you don't care about .mo files.
5615
5616   How to confirm HTML output
5617       HTML files are generated in doc/locale/${LANGUAGE}/html/. (Please  sub‐
5618       stitute ${LANGUAGE} with your language code such as 'ja'.) You can con‐
5619       firm HTML output by your favorite browser:
5620
5621       % firefox doc/locale/ja/html/index.html
5622
5623   How to send your works
5624       We can receive your works via pull request on GitHub or E-mail  attach‐
5625       ment patch or .po files themselves.
5626
5627   How to send pull request
5628       Here are command lines to send pull request:
5629
5630       % git add doc/locale/ja/LC_MESSAGES/*.po
5631       % git commit
5632       % git push
5633
5634       Now  you  can send pull request on GitHub. You just access your reposi‐
5635       tory page on GitHub and press Pull Request button.
5636
5637       See also
5638
5639              Help.GitHub - Sending pull requests.
5640
5641   How to send patch
5642       Here are command lines to create patch:
5643
5644       % git add doc/locale/ja/LC_MESSAGES/*.po
5645       % git commit
5646       % git format-patch origin/master
5647
5648       You can find 000X-YYY.patch files in the current directory. Please send
5649       those files to us!
5650
5651       See also
5652
5653              /community describes our contact information.
5654
5655   How to send .po files
5656       Please  archive  doc/locale/${LANGUAGE}/LC_MESSAGES/ (Please substitute
5657       ${LANGUAGE} with your language code such as 'ja'.) and send it  to  us!
5658       We extract and merge them to the groonga repository.
5659
5660       See also
5661
5662              /community describes our contact information.
5663
5664   How to add new language
5665       Here are command lines to add new translation language:
5666
5667       % cd doc/locale
5668       % make add LOCALE=${LANGUAGE} # specify your language code such as 'de'.
5669
5670       Please substitute ${LANGUAGE} with your language code such as 'ja'.
5671
5672       See also
5673
5674              Codes for the Representation of Names of Languages.
5675
5676       · genindex
5677
5678       · modindex
5679
5680       · search
5681

AUTHOR

5683       groonga project
5684
5686       2009-2011, Brazil, Inc
5687
5688
5689
5690
56911.2.6                          October 27, 2011                     GROONGA(1)
Impressum