rroonga 2.1.2 → 2.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,34 @@
1
1
  h1. NEWS
2
2
 
3
+ h2(#2-1-3). 2.1.3: 2013-01-29
4
+
5
+ h3. Improvements
6
+
7
+ * Removed Groonga::View removed in groonga 2.1.2.
8
+ * [doc] Added tutorial in English.
9
+ ** for English:http://ranguba.org/rroonga/en/file.tutorial.html
10
+ ** for Japanese:http://ranguba.org/rroonga/ja/file.tutorial.html
11
+ * [context] Added Context#restore. This method restores command dumped
12
+ by "grndump" command. Please see example below:
13
+ <pre>
14
+ !!!ruby
15
+ dumped_commands = File.read("dump.grn")
16
+ context.restore(dumped_commands)
17
+ </pre>
18
+
19
+ h3. Fixes
20
+
21
+ * Added missing Groonga::Logger.
22
+ * [dumper] Reduced needless new lines in dumped commands.
23
+ * For installing groonga with this gem:
24
+ ** Fix the needless install of documents.
25
+ ** Fix the needless build of static library.
26
+
27
+ * For ranguba project:
28
+ ** [template] Removed needless block for sponsor by rubyforge.
29
+ ** [template] Removed needless piwik tag.
30
+ ** [template] Fixed URLs of references in Japanese.
31
+
3
32
  h2(#2-1-2). 2.1.2: 2013-01-04
4
33
 
5
34
  h3. Fixes
@@ -1,22 +1,20 @@
1
- h1. チュートリアル
1
+ h1. Tutorial
2
2
 
3
- このページでは簡単なアプリケーションの作成を通して
4
- rroongaの操作方法を紹介します。
3
+ This page introduce how to use rroonga via a simple application making.
5
4
 
6
- h2. インストール
5
+ h2. Install
7
6
 
8
- rroongaRubyGemsでインストールできます。
7
+ You can install rroonga in your compter with RubyGems.
9
8
 
10
9
  <pre>
11
10
  !!!command_line
12
11
  % sudo gem install rroonga
13
12
  </pre>
14
13
 
15
- h2. データベースの作成
14
+ h2. Create Database
16
15
 
17
- 簡単なブックマークアプリケーション用のデータベースを作ってみ
18
- ます。以下のようにgroongaライブラリを読み込んでirbを起動しま
19
- す。
16
+ Let's create database for simple bookmark application.
17
+ Please execute irb with loading rroonga with this command:
20
18
 
21
19
  <pre>
22
20
  !!!irb
@@ -24,7 +22,7 @@ h2. データベースの作成
24
22
  >>
25
23
  </pre>
26
24
 
27
- まず、エンコーディングを設定します。ここではUTF-8を利用します。
25
+ Now you use UTF-8 as the encoding of database.
28
26
 
29
27
  <pre>
30
28
  !!!irb
@@ -34,7 +32,7 @@ h2. データベースの作成
34
32
  => {:encoding=>:utf8}
35
33
  </pre>
36
34
 
37
- それでは、ファイルを指定してデータベースを作成します。
35
+ Then, try to create database in a file.
38
36
 
39
37
  <pre>
40
38
  !!!irb
@@ -42,33 +40,38 @@ h2. データベースの作成
42
40
  => #<Groonga::Database ...>
43
41
  </pre>
44
42
 
45
- ここで作成したデータベースは、これ以降、暗黙のうちに利用され
46
- ます。最初にデータベースを作成したら特に意識する必要はありま
47
- せん。
43
+ From now, the created database is used implicitly.
44
+ You don't have to be aware of it after you created a database first.
48
45
 
49
- h2. テーブルの定義
46
+ h2. Define table
50
47
 
51
- groongaには以下の3種類のテーブルがあります。
48
+ Groonga supports 4 types of tables.
52
49
 
53
50
  - Groonga::Hash :=
54
- ハッシュテーブル。主キーでレコードを管理します。キーと完全
55
- 一致するレコードを非常に高速に検索することができます。
51
+ Hash table. It manages records via each primary key. It supports
52
+ very quickly exact match search.
56
53
  =:
57
54
 
58
55
  - Groonga::PatriciaTrie :=
59
- パトリシアトライ。ハッシュテーブルに比べて完全一致検索の速
60
- 度がやや遅いですが、前方一致検索・共通接頭辞探索などの検索
61
- が行えます。またカーソルを用いてキーの昇降順にレコードを取
62
- り出すことができます。
56
+ Patricia Trie. It supports some search such as predictive search and
57
+ common prefix search, but it provides a little slowly exact match search
58
+ than Groonga::Hash. It provides cursor to take records in ascending
59
+ or descending order.
60
+ =:
61
+
62
+ - Groonga::DoubleArrayTrie :=
63
+ Double Array Trie. It requires large spaces rather than other
64
+ tables, but it can update key without ID change. It provides exract
65
+ match search, predictive search and common prefix search and cursor
66
+ like Groonga::PatriciaTrie.
63
67
  =:
64
68
 
65
69
  - Groonga::Array :=
66
- 配列。主キーの存在しないテーブルです。レコードはIDによって
67
- 識別します。
70
+ Array. It doesn't have primary keys. It manages records by ID.
68
71
  =:
69
72
 
70
- ここではハッシュテーブルを利用して、 @Items@ という名前のテー
71
- ブルを作成します。キーは文字列とします。
73
+ Now, you use Groonga::Hash and create the table named @Items@. The type
74
+ of its primary key is String.
72
75
 
73
76
  <pre>
74
77
  !!!irb
@@ -76,9 +79,8 @@ groongaには以下の3種類のテーブルがあります。
76
79
  => [...]
77
80
  </pre>
78
81
 
79
- これで @Items@ という名前のテーブルが作成できました。
80
-
81
- 定義したテーブルはGroonga.[]で参照できます。
82
+ You have @Items@ table by this code.
83
+ You can refer the defined table with Groonga.[] like below:
82
84
 
83
85
  <pre>
84
86
  !!!irb
@@ -86,10 +88,9 @@ groongaには以下の3種類のテーブルがあります。
86
88
  => #<Groonga::Hash ...>
87
89
  </pre>
88
90
 
89
- テーブルはRubyのHashのように扱えます。
90
-
91
- 例えば、以下のように @size@ でテーブルに登録されているレコード
92
- の件数を取得できます。
91
+ You can treat it like Hash.
92
+ For example, let's type @items.size@ to get the number of records in
93
+ the table.
93
94
 
94
95
  <pre>
95
96
  !!!irb
@@ -97,19 +98,19 @@ groongaには以下の3種類のテーブルがあります。
97
98
  => 0
98
99
  </pre>
99
100
 
100
- h2. レコードを追加する
101
+ h2. Add records
101
102
 
102
- @Items@ テーブルにレコードを追加します。
103
+ Let's add records to @Items@ table.
103
104
 
104
105
  <pre>
105
106
  !!!irb
106
- >> items.add("http://ja.wikipedia.org/wiki/Ruby")
107
+ >> items.add("http://en.wikipedia.org/wiki/Ruby")
107
108
  => #<Groonga::Record ...>
108
- >> items.add("http://www.ruby-lang.org/ja/")
109
+ >> items.add("http://www.ruby-lang.org/")
109
110
  => #<Groonga::Record ...>
110
111
  </pre>
111
112
 
112
- 件数を確認すると確かに2件増えています。
113
+ Please check the number of records. It increases from 0 to 2.
113
114
 
114
115
  <pre>
115
116
  !!!irb
@@ -117,22 +118,19 @@ h2. レコードを追加する
117
118
  => 2
118
119
  </pre>
119
120
 
120
- 主キーを指定してレコードを取り出す時には以下のようにします。
121
+ If you can get record by primary key, type like below:
121
122
 
122
123
  <pre>
123
124
  !!!irb
124
- >> items["http://ja.wikipedia.org/wiki/Ruby"]
125
+ >> items["http://en.wikipedia.org/wiki/Ruby"]
125
126
  => #<Groonga::Record ...>
126
127
  </pre>
127
128
 
128
- h2. 全文検索を行う
129
+ h2. Full text search
129
130
 
130
- itemのタイトル文字列を登録して、全文検索できるようにしてみ
131
- ましょう。
131
+ Let's add item's title to full text search.
132
132
 
133
- まず @Items@ テーブルに @title@ という名前のカラムを追加し
134
- ます。ここでは、 @Text@ 型のデータを持つカラムとして定義
135
- します。
133
+ first, you add the @Text@ type column "@title@" to @Items@ table.
136
134
 
137
135
  <pre>
138
136
  !!!irb
@@ -142,8 +140,8 @@ h2. 全文検索を行う
142
140
  => [...]
143
141
  </pre>
144
142
 
145
- 定義したカラムは @#{テーブル名}.#{カラム名}@ という名前になります。
146
- テーブルと同じように {Groonga.[]} で参照できます。
143
+ Defined columns is named as @#{TABLE_NAME}.#{COLUMN_NAME}@.
144
+ You can refer them with {Groonga.[]} as same as tables.
147
145
 
148
146
  <pre>
149
147
  !!!irb
@@ -151,35 +149,33 @@ h2. 全文検索を行う
151
149
  => #<Groonga::VariableSizeColumn ...>
152
150
  </pre>
153
151
 
154
- 全文検索するために、文字列を分解して得られる各単語を格納する
155
- ためのテーブルを別途用意します。ここではTermsという名前でテー
156
- ブルを定義します。
152
+
153
+ Secondly, let's add the table containing terms from splited from texts.
154
+ Then you define the @Terms@ for it.
157
155
 
158
156
  <pre>
159
157
  !!!irb
160
158
  >> Groonga::Schema.create_table("Terms",
161
159
  ?> :type => :patricia_trie,
162
- ?> :key_normalize => true,
160
+ ?> :normalizer => :NormalizerAuto,
163
161
  ?> :default_tokenizer => "TokenBigram")
164
162
  </pre>
165
163
 
166
- ここでは、トークナイザとして<tt>:default_tokenzier =>
167
- "TokenBigram"</tt> を指定しています。トークナイザとは文字列を
168
- 単語に分解するオブジェクトのことです。デフォルトではトークナ
169
- イザは指定されていません。全文検索を利用するためにはトークナ
170
- イザを指定する必要があるので、ここではN-gramの一種であるバイ
171
- グラムを指定しています。
164
+ You specify @:default_tokenzier => "TokenBigram"@ for "Tokenizer" in
165
+ the above code.
166
+ "Tokenizer" is the object to split terms from texts. The default value
167
+ for it is none.
168
+ Full text search requires a tokenizer, so you specify "Bigram", a type
169
+ of N-gram.
170
+ Full text search with N-gram uses splited N characters and their
171
+ position in texts. "N" in N-gram specifies the number of each terms.
172
+ Groonga supports Unigram (N=1), Bigram (N=2) and Trigram (N=3).
172
173
 
173
- N-gramを利用した全文検索では、分解したN文字とその出現位置を利
174
- 用して全文検索を行います。N-gramのNは文字列を何文字毎に分解す
175
- るかの文字数になります。groongaは1文字で分解するユニグラム、
176
- 2文字のバイグラム、3文字のトリグラムをサポートしています。
174
+ You also specify @:normalizer => :NormalizerAuto@ to search texts with
175
+ ignoring the case.
177
176
 
178
- また、大文字小文字の区別なく検索するために
179
- @:key_normalize => true@ も指定しています。
180
-
181
- 単語格納用テーブルの準備ができたので、 @Items@ テーブ
182
- ルの @title@ カラムに対するインデックスを定義します。
177
+ Now, you ready table for terms, so you define the index of
178
+ @Items.tiltle@ column.
183
179
 
184
180
  <pre>
185
181
  !!!irb
@@ -189,74 +185,67 @@ N-gramを利用した全文検索では、分解したN文字とその出現位
189
185
  => [...]
190
186
  </pre>
191
187
 
192
- 少し違和感を感じるかも知れませんが、 @Items@ テーブル
193
- のカラムに対するインデックスは、 @Terms@ テーブルのカ
194
- ラムとして定義します。
188
+ You may feel a few unreasonable code. The index of @Items@ table's
189
+ column is defined as the column in @Terms@.
195
190
 
196
- @Items@ にレコードが登録されると、その中に含まれる単
197
- 語に該当するレコードが @Terms@ に自動的に追加されるよ
198
- うになります。
191
+ When a record is added to @Items@, groonga adds records associated
192
+ each terms in it to @Terms@ automatically.
199
193
 
200
- @Terms@ は、文書に含まれる語彙に相当する、やや特殊な
201
- テーブルだと言えます。しかし、他のテーブルと同様に語彙テーブ
202
- ルには自由にカラムを追加し、単語毎の様々な属性を管理すること
203
- ができます。これはある種の検索処理を行う際には非常に便利に機
204
- 能します。
205
194
 
206
- これでテーブルの定義は完了です。
195
+ @Terms@ is a few particular table, but you can add some columns to term
196
+ table such as @Terms@ and manage many attributes of each terms. It is
197
+ very useful to process particular search.
207
198
 
208
- 先ほど登録した各レコードの @title@ カラムに値をセットします。
199
+ Now, you finished table definition.
200
+ Let's put some values to @title@ of each record you added before.
209
201
 
210
202
  <pre>
211
203
  !!!irb
212
- >> items["http://ja.wikipedia.org/wiki/Ruby"].title = "Ruby"
204
+ >> items["http://en.wikipedia.org/wiki/Ruby"].title = "Ruby"
213
205
  => "Ruby"
214
- >> items["http://www.ruby-lang.org/ja/"].title = "オブジェクトスクリプト言語Ruby"
215
- "オブジェクトスクリプト言語Ruby"
206
+ >> items["http://www.ruby-lang.org/"].title = "Ruby Programming Language"
207
+ "Ruby Programming Language"
216
208
  </pre>
217
209
 
218
- 以下のようにして検索することができます。
210
+ Now, you can do full text search like above:
219
211
 
220
212
  <pre>
221
213
  !!!irb
222
214
  >> ruby_items = items.select {|record| record.title =~ "Ruby"}
223
- => #<Groonga::Hash ..., size: <2>>
215
+ => #<Groonga::Hash ..., normalizer: (nil)>
224
216
  </pre>
225
217
 
226
- 検索結果はGroonga::Hashで返されます。ハッシュのキーに見つかっ
227
- @Items@ のレコードが入っています。
218
+ Groonga returns the search result as Groonga::Hash.
219
+ Keys in this hash table is records of hitted @Items@.
228
220
 
229
221
  <pre>
230
222
  !!!irb
231
223
  >> ruby_items.collect {|record| record.key.key}
232
- => ["http://ja.wikipedia.org/wiki/Ruby", "http://www.ruby-lang.org/ja/"]
224
+ => ["http://en.wikipedia.org/wiki/Ruby", "http://www.ruby-lang.org/"]
233
225
  </pre>
234
226
 
235
- 上の例では @record.key@ @Items@ のレコードを取得して、
236
- さらにそのキーを指定して( @record.key.key@ )で @Items@
237
- のキーを返しています。
227
+ In above example, you get records in @Items@ with @record.key@, and
228
+ keys of them with @record.key.key@.
238
229
 
239
- @record["_key"]@ でアクセスすると自動的に参照しているレコード
240
- を辿っていき、参照先のキーにアクセスできます。
230
+ You can access a refered key in records briefly with @record["_key"]@.
241
231
 
242
232
  <pre>
243
233
  !!!irb
244
234
  >> ruby_items.collect {|record| record["_key"]}
245
- => ["http://ja.wikipedia.org/wiki/Ruby", "http://www.ruby-lang.org/ja/"]
235
+ => ["http://en.wikipedia.org/wiki/Ruby", "http://www.ruby-lang.org/"]
246
236
  </pre>
247
237
 
248
- h2. マルチユーザ向けのブックマークアプリケーション
238
+ h2. Improve the simple bookmark application
249
239
 
250
- ここまでで作った単機能のアプリケーションをもう少し拡張して、
251
- 複数のユーザが、それぞれにコメントを記入できるブックマークア
252
- プリケーションにしてみましょう。
240
+ Let's try to improve this simple application a little. You can create
241
+ bookmark application for multi users and they can comment to each
242
+ bookmarks.
253
243
 
254
- まず、ユーザ情報とコメント情報を格納するテーブルを追加して、
255
- 下図のようなテーブル構成にします。
244
+ First, you add tables for users and for comments like below:
256
245
 
257
246
  !http://qwik.jp/senna/senna2.files/rect4605.png!
258
247
 
259
- まず、 @Users@ テーブルを追加します。
248
+ Let's add the table for users, @Users@.
260
249
 
261
250
  <pre>
262
251
  !!!irb
@@ -266,7 +255,8 @@ h2. マルチユーザ向けのブックマークアプリケーション
266
255
  => [...]
267
256
  </pre>
268
257
 
269
- 次に、 @Comments@ テーブルを追加します。
258
+
259
+ Next, let's add the table for comments as @Comments@.
270
260
 
271
261
  <pre>
272
262
  !!!irb
@@ -279,8 +269,8 @@ h2. マルチユーザ向けのブックマークアプリケーション
279
269
  => [...]
280
270
  </pre>
281
271
 
282
- @Comments@ テーブルの @content@ カラムを全文検索できる
283
- ようにインデックスを定義します。
272
+ Then you define the index of @content@ column in @Comments@ for full
273
+ text search.
284
274
 
285
275
  <pre>
286
276
  !!!irb
@@ -290,46 +280,43 @@ h2. マルチユーザ向けのブックマークアプリケーション
290
280
  => [...]
291
281
  </pre>
292
282
 
293
- これでテーブルが定義できました。
283
+ You finish table definition by above code.
294
284
 
295
- 続いてユーザを何人か追加します。
285
+ Secondly, you add some users to @Users@.
296
286
 
297
287
  <pre>
298
288
  !!!irb
299
289
  >> users = Groonga["Users"]
300
290
  => #<Groonga::Hash ...>
301
- >> users.add("moritan", :name => "モリタン")
291
+ >> users.add("alice", :name => "Alice")
302
292
  => #<Groonga::Record ...>
303
- >> users.add("taporobo", :name => "タポロボ")
293
+ >> users.add("bob", :name => "Bob")
304
294
  => #<Groonga::Record ...>
305
295
  </pre>
306
296
 
307
- 次に、実際にユーザがブックマークを貼る時の処理を実行してみま
308
- しょう。
297
+ Now, let's write the process to bookmark by a user.
298
+ You assume that the user, @moritan@, bookmark a page including
299
+ infomation related Ruby.
309
300
 
310
- ユーザ @moritan@ が、Ruby関連のとあるページをブックマークしたと
311
- 想定します。
312
-
313
- まず対象のページが @Items@ テーブルに登録済かどうか調
314
- べます。
301
+ First, you check if the page has been added @Items@ already.
315
302
 
316
303
  <pre>
317
304
  !!!irb
318
- >> items.has_key?("http://www.rubyist.net/~matz/")
305
+ >> items.has_key?("http://www.ruby-doc.org/")
319
306
  => false
320
307
  </pre>
321
308
 
322
- 未登録なのでまず当該ページを @Items@ に登録します。
309
+ The page hasn't been added, so you add it to @Items@.
323
310
 
324
311
  <pre>
325
312
  !!!irb
326
- >> items.add("http://www.rubyist.net/~matz/",
327
- ?> :title => "Matzにっき")
313
+ >> items.add("http://www.ruby-doc.org/",
314
+ ?> :title => "Ruby-Doc.org: Documenting the Ruby Language")
328
315
  => #<Groonga::Record ...>
329
316
  </pre>
330
317
 
331
- 次に、登録したitemを @item@ カラムの値に指定して
332
- @Comments@ にレコードを登録します。
318
+ Next, you add the record to @Comments@. This record contains this page
319
+ as its @item@ column.
333
320
 
334
321
  <pre>
335
322
  !!!irb
@@ -337,16 +324,16 @@ h2. マルチユーザ向けのブックマークアプリケーション
337
324
  => true
338
325
  >> comments = Groonga["Comments"]
339
326
  => #<Groonga::Array ...>
340
- >> comments.add(:item => "http://www.rubyist.net/~matz/",
341
- ?> :author => "moritan",
342
- ?> :content => "Ruby Matz",
327
+ >> comments.add(:item => "http://www.ruby-doc.org/",
328
+ ?> :author => "alice",
329
+ ?> :content => "Ruby documents",
343
330
  ?> :issued => Time.parse("2010-11-20T18:01:22+09:00"))
344
331
  => #<Groonga::Record ...>
345
332
  </pre>
346
333
 
347
- h2. メソッド化
334
+ h2. Define methods for this process
348
335
 
349
- 上記の一連の手続きをメソッドにまとめてみます。
336
+ For usefull, you define methods for above processes.
350
337
 
351
338
  <pre>
352
339
  !!!irb
@@ -364,38 +351,37 @@ h2. メソッド化
364
351
  => nil
365
352
  </pre>
366
353
 
367
- @items@ @comments@ をインスタンス変数に代入しているのはメ
368
- ソッド内からでも見えるようにするためです。
354
+ You assign @items@ and @comments@ to each instance variable, so you can
355
+ use them in @add_bookmark@ method.
369
356
 
370
- @add_bookmark@ は以下のような手順を実行しています。
357
+ @add_bookmark@ executes processes like below:
371
358
 
372
- * @Items@ テーブルに該当ページのレコードがあるかどうか調べる。
373
- * レコードがなければ追加する。
374
- * @Comments@ テーブルにレコードを登録する。
359
+ * Check if the record associated the page exists in @Items@ table.
360
+ * If not, add the record to it.
361
+ * Add the record to @Comments@ table.
375
362
 
376
- 作成したメソッドを呼び出していくつかブックマークを登録してみ
377
- ましょう。
363
+ With this method, lets bookmark some pages.
378
364
 
379
365
  <pre>
380
366
  !!!irb
381
- >> add_bookmark("http://jp.rubyist.net/magazine/",
382
- ?> "Rubyist Magazine - るびま", "moritan", "Ruby 記事",
367
+ >> add_bookmark("https://rubygems.org/",
368
+ ?> "RubyGems.org | your community gem host", "alice", "Ruby gems",
383
369
  ?> Time.parse("2010-10-07T14:18:28+09:00"))
384
370
  => #<Groonga::Record ...>
385
- >> add_bookmark("http://groonga.rubyforge.org/",
386
- ?> "Rubygroonga使って全文検索 - ラングバ", "taporobo",
387
- ?> "Ruby groonga 全文検索",
371
+ >> add_bookmark("http://ranguba.org/",
372
+ ?> "Fulltext search by Ruby with groonga - Ranguba", "bob",
373
+ ?> "Ruby groonga fulltextsearch",
388
374
  ?> Time.parse("2010-11-11T12:39:59+09:00"))
389
375
  => #<Groonga::Record ...>
390
- >> add_bookmark("http://www.rubyist.net/~matz/",
391
- ?> "Matz日記", "taporobo", "Ruby 日記",
376
+ >> add_bookmark("http://www.ruby-doc.org/",
377
+ ?> "ruby-doc", "bob", "ruby documents",
392
378
  ?> Time.parse("2010-07-28T20:46:23+09:00"))
393
379
  => #<Groonga::Record ...>
394
380
  </pre>
395
381
 
396
- h2. 全文検索その2
382
+ h2. Full text search part 2
397
383
 
398
- 登録したレコードに対して全文検索を実行してみます。
384
+ Let's do full text search for added records.
399
385
 
400
386
  <pre>
401
387
  !!!irb
@@ -404,28 +390,26 @@ h2. 全文検索その2
404
390
  >> end
405
391
  => #<Groonga::Hash ...>
406
392
  >> records.each do |record|
407
- ?> comment = record.value
393
+ ?> comment = record
408
394
  >> p [comment.id,
409
395
  ?> comment.issued,
410
396
  ?> comment.item.title,
411
397
  ?> comment.author.name,
412
398
  ?> comment.content]
413
399
  >> end
414
- [1, Sat Nov 20 18:01:22 +0900 2010, "Matzにっき", "モリタン", "Ruby Matz"]
415
- [2, Thu Oct 07 14:18:28 +0900 2010, "Rubyist Magazine - るびま", "モリタン", "Ruby 記事"]
416
- [3, Thu Nov 11 12:39:59 +0900 2010, "Rubygroonga使って全文検索 - ラングバ", "タポロボ", "Ruby groonga 全文検索検"]
417
- [4, Wed Jul 28 20:46:23 +0900 2010, "Matzにっき", "タポロボ", "Ruby 日記"]
400
+ [1, 2010-11-20 18:01:22 +0900, "Ruby-Doc.org: Documenting the Ruby Language", "Alice", "Ruby documents"]
401
+ [2, 2010-10-07 14:18:28 +0900, "RubyGems.org | your community gem host", "Alice", "Ruby gems"]
402
+ [3, 2010-11-11 12:39:59 +0900, "Fulltext search by Ruby with groonga - Ranguba", "Bob", "Ruby groonga fulltextsearch"]
403
+ [4, 2010-07-28 20:46:23 +0900, "Ruby-Doc.org: Documenting the Ruby Language", "Bob", "ruby documents"]
418
404
  </pre>
419
405
 
420
- カラム名と同じメソッドでカラムへのアクセスできます。複合デー
421
- タ型の要素も再帰的に辿ることができます。(同様の出力を普通の
422
- RDBで実現するためには、 @Items@ テーブル、
423
- @Comments@ テーブル、 @Users@ テーブルのJOIN操作が
424
- 必要になります。)
406
+ You can access the columns with the same name method as each them.
407
+ These methods suport to access the complex data type.
408
+ (In usually RDB, you should namage JOIN tables, @Items@, @Comments@,
409
+ @Users@.)
425
410
 
426
- 上の式の中で、肝心の検索処理は、第一引数の式を評価する時点で
427
- 完了していて、レコードセットオブジェクトとしてメモリに蓄積さ
428
- れています。
411
+ The search is finished when the first sentence in this codes. The
412
+ results of this search is the object as records set.
429
413
 
430
414
  <pre>
431
415
  !!!irb
@@ -433,29 +417,27 @@ RDBで実現するためには、 @Items@ テーブル、
433
417
  #<Groonga::Hash ..., size: <4>>
434
418
  </pre>
435
419
 
436
- レコードセットは、出力する前に様々に加工することができます。
437
-
438
- 以下は、日付で降順にソートしてから出力した例です。
420
+ You can arrange this records set before output.
421
+ For example, sort these records in the descending order by date.
439
422
 
440
423
  <pre>
441
424
  !!!irb
442
425
  >> records.sort([{:key => "issued", :order => "descending"}]).each do |record|
443
- ?> comment = record.key
426
+ ?> comment = record
444
427
  >> p [comment.id,
445
428
  ?> comment.issued,
446
429
  ?> comment.item.title,
447
430
  ?> comment.author.name,
448
431
  ?> comment.content]
449
432
  >> end
450
- [1, Sat Nov 20 18:01:22 +0900 2010, "Matzにっき", "モリタン", "Ruby Matz"]
451
- [3, Thu Nov 11 12:39:59 +0900 2010, "Rubygroonga使って全文検索 - ラングバ", "タポロボ", "Ruby groonga 全文検索"]
452
- [2, Thu Oct 07 14:18:28 +0900 2010, "Rubyist Magazine - るびま", "モリタン", "Ruby 記事"]
453
- [4, Wed Jul 28 20:46:23 +0900 2010, "Matzにっき, "タポロボ", "Ruby 日記"]
433
+ [1, 2010-11-20 18:01:22 +0900, "Ruby-Doc.org: Documenting the Ruby Language", "Alice", "Ruby documents"]
434
+ [2, 2010-11-11 12:39:59 +0900, "Fulltext search by Ruby with groonga - Ranguba", "Bob", "Ruby groonga fulltextsearch"]
435
+ [3, 2010-10-07 14:18:28 +0900, "RubyGems.org | your community gem host", "Alice", "Ruby gems"]
436
+ [4, 2010-07-28 20:46:23 +0900, "Ruby-Doc.org: Documenting the Ruby Language", "Bob", "ruby documents"]
454
437
  => [...]
455
438
  </pre>
456
439
 
457
- 同じitemが何度も出てくると検索結果が見にくいので、item毎にグ
458
- ループ化してみます。
440
+ Let's group the result by each item for easy view.
459
441
 
460
442
  <pre>
461
443
  !!!irb
@@ -465,42 +447,37 @@ RDBで実現するためには、 @Items@ テーブル、
465
447
  ?> item.key,
466
448
  ?> item.title]
467
449
  >> end
468
- [2, "http://www.rubyist.net/~matz/", "Matzにっき"]
469
- [1, "http://jp.rubyist.net/magazine/", "Rubyist Magazine - るびま"]
470
- [1, "http://groonga.rubyforge.org/", "Rubygroonga使って全文検索 - ラングバ"]
450
+ [2, "http://www.ruby-doc.org/", "Ruby-Doc.org: Documenting the Ruby Language"]
451
+ [1, "https://rubygems.org/", "RubyGems.org | your community gem host"]
452
+ [1, "http://ranguba.org/", "Fulltext search by Ruby with groonga - Ranguba"]
471
453
  => nil
472
454
  </pre>
473
455
 
474
- @n_sub_records@ というのはグループ化した単位に含まれるレコード
475
- の件数を示します。SQLで言えば、GROUP BY句を含むクエリのcount
476
- 関数のような働きです。
456
+ @n_sub_records@ is the number of records in each group.
457
+ It is similar value as count() function of a query including "GROUP
458
+ BY" in SQL.
477
459
 
478
- h2. 少し複雑な検索
460
+ h2. more complex search
479
461
 
480
- さらに実用的な検索について考えてみましょう。
462
+ Now, you challenge the more useful search.
481
463
 
482
- ブックマークが大量に蓄積されるに従って、より的確に適合度を算
483
- 出する必要性に迫られます。
464
+ You should calcurate goodness of fit of search explicitly.
484
465
 
485
- 今のところ検索対象として利用できるのは @Items.title@
486
- @Comments.content@ ですが、 @Items.title@
487
- 元ページから得られるやや信頼できる情報なのに対して、
488
- @Comments.content@ はブックマークユーザが任意に設定で
489
- きる情報で、やや信憑性に乏しいと言えます。しかし、再現率を確
490
- 保するためにはユーザのコメントも是非対象に含めたいところです。
466
+ You can use @Items.title@ and @Comments.content@ as search targets now.
467
+ @Items.title@ is the a few reliable information taken from each
468
+ original pages. On the other hands, @Comments.content@ is the less
469
+ reliable information because this depends on users of bookmark
470
+ application.
491
471
 
492
- そこで、以下のようなポリシーで検索を行うことにします。
472
+ Then, you search records with this policy:
493
473
 
494
- * @Items.title@ @Comments.content@ のいずれ
495
- かにマッチするitemを検索する。
496
- * ただし、 @Items.title@ にマッチしたレコードはスコア
497
- を10倍重み付けする。
498
- * 同一のitemに対して、キーワードにマッチする @comment@
499
- が複数存在した場合は、それぞれの @comment@ のスコアの
500
- 和を、該当するitemのスコアとする。
474
+ * Search item matched @Items.title@ or @Comments.content@.
475
+ * Add 10 times heavier weight to socres of each record matched
476
+ @Items.title@ than ones of @Comments.comment@.
477
+ * If multi @comment@ of one item are matched keyword, specify the sum
478
+ of scores of each @coments@ as score of the item.
501
479
 
502
- 以下のようにして、commentとitemとそれぞれに対する検索結果を求
503
- めます。
480
+ On this policy, you try to type below:
504
481
 
505
482
  <pre>
506
483
  !!!irb
@@ -515,8 +492,8 @@ h2. 少し複雑な検索
515
492
  #<Groonga::Hash ..., size: <4>>
516
493
  </pre>
517
494
 
518
- _ruby_comments_の結果をitem毎にグループ化し、_ruby_items_と
519
- unionして出力します。
495
+ You group the results of _ruby_comments_ in each item and union
496
+ _ruby_items_ .
520
497
 
521
498
  <pre>
522
499
  !!!irb
@@ -525,11 +502,11 @@ unionして出力します。
525
502
  >> ruby_items.sort([{:key => "_score", :order => "descending"}]).each do |record|
526
503
  >> p [record.score, record.title]
527
504
  >> end
528
- [10, "Rubyist Magazine - るびま"]
505
+ [22, "Ruby-Doc.org: Documenting the Ruby Language"]
506
+ [11, "Fulltext search by Ruby with groonga - Ranguba"]
507
+ [10, "Ruby Programming Language"]
529
508
  [10, "Ruby"]
530
- [10, "Rubyでgroonga使って全文検索 - ラングバ"]
531
- [10, "オブジェクトスクリプト言語Ruby"]
532
- [2, "Matzにっき"]
509
+ [1, "RubyGems.org | your community gem host"]
533
510
  </pre>
534
511
 
535
- これで目的の結果が得られました。
512
+ Then, you get the result.