rroonga 4.0.5 → 4.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -1
  3. data/benchmark/common.rb +4 -4
  4. data/benchmark/create-wikipedia-database.rb +5 -5
  5. data/benchmark/read-write-many-small-items.rb +8 -8
  6. data/benchmark/repeat-load.rb +4 -4
  7. data/benchmark/select.rb +9 -9
  8. data/benchmark/write-many-small-items.rb +8 -8
  9. data/doc/images/sample-schema.png +0 -0
  10. data/doc/text/install.textile +2 -2
  11. data/doc/text/news.textile +41 -0
  12. data/doc/text/tutorial.textile +4 -4
  13. data/example/bookmark.rb +6 -7
  14. data/example/index-html.rb +6 -6
  15. data/ext/groonga/extconf.rb +23 -1
  16. data/ext/groonga/rb-grn-column.c +3 -2
  17. data/ext/groonga/rb-grn-context.c +20 -3
  18. data/ext/groonga/rb-grn-double-array-trie.c +11 -2
  19. data/ext/groonga/rb-grn-exception.c +28 -10
  20. data/ext/groonga/rb-grn-expression.c +78 -0
  21. data/ext/groonga/rb-grn-hash.c +10 -0
  22. data/ext/groonga/rb-grn-logger.c +7 -3
  23. data/ext/groonga/rb-grn-object.c +3 -2
  24. data/ext/groonga/rb-grn-patricia-trie.c +23 -20
  25. data/ext/groonga/rb-grn-table-key-support.c +92 -1
  26. data/ext/groonga/rb-grn-table.c +60 -17
  27. data/ext/groonga/rb-grn-utils.c +51 -2
  28. data/ext/groonga/rb-grn-variable-size-column.c +11 -7
  29. data/ext/groonga/rb-grn.h +11 -1
  30. data/lib/groonga/dumper.rb +23 -1
  31. data/lib/groonga/patricia-trie.rb +1 -1
  32. data/lib/groonga/schema.rb +190 -205
  33. data/misc/grnop2ruby.rb +1 -1
  34. data/rroonga-build.rb +3 -3
  35. data/rroonga.gemspec +1 -0
  36. data/test/groonga-test-utils.rb +2 -2
  37. data/test/test-column.rb +19 -0
  38. data/test/test-context.rb +5 -1
  39. data/test/test-double-array-trie.rb +19 -0
  40. data/test/test-exception.rb +7 -2
  41. data/test/test-expression.rb +19 -0
  42. data/test/test-fix-size-column.rb +49 -36
  43. data/test/test-hash.rb +22 -0
  44. data/test/test-patricia-trie.rb +26 -7
  45. data/test/test-schema-dumper.rb +65 -1
  46. data/test/test-schema.rb +13 -2
  47. data/test/test-variable-size-column.rb +6 -5
  48. metadata +47 -46
@@ -33,7 +33,7 @@ module Groonga
33
33
  # include ERB::Util
34
34
  # Groonga::Context.default_options = {:encoding => "utf-8"}
35
35
  # words = Groonga::PatriciaTrie.create(:key_type => "ShortText",
36
- # :key_normalize => true)
36
+ # :normalizer => "NormalizerAuto")
37
37
  # words.add('ガッ')
38
38
  # words.add('MUTEKI')
39
39
  #
@@ -1,6 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  # Copyright (C) 2009-2014 Kouhei Sutou <kou@clear-code.com>
4
+ # Copyright (C) 2014 Masafumi Yokoyama <myokoym@gmail.com>
4
5
  #
5
6
  # This library is free software; you can redistribute it and/or
6
7
  # modify it under the terms of the GNU Lesser General Public
@@ -24,7 +25,7 @@ module Groonga
24
25
  # {Groonga::Schema} を使うことにより簡単にテーブルやカラムを
25
26
  # 追加・削除することができる。
26
27
  #
27
- # !http://qwik.jp/senna/senna2.files/rect4605.png!
28
+ # ![Sample schema](https://raw.githubusercontent.com/ranguba/rroonga/master/doc/images/sample-schema.png)
28
29
  #
29
30
  # @example 上図のようなスキーマを定義する場合は以下のようになる。
30
31
  # Groonga::Schema.define do |schema|
@@ -185,231 +186,195 @@ module Groonga
185
186
  # クトがわたるので、そのオブジェクトを利用してテーブル
186
187
  # の詳細を定義する。
187
188
  #
189
+ # @!macro [new] schema.create_table.common.options
190
+ # @param [::Hash] options The name and value
191
+ # pairs. Omitted names are initialized as the default value.
192
+ #
193
+ # @option options [:array, :hash, :patricia_trie, :double_array_trie] :type The table type
194
+ #
195
+ # テーブルの型を指定する。
196
+ # `:array`, `:hash`, `:patricia_trie`,
197
+ # `:double_array_trie` のいずれかを指定する。
198
+ # (:key_typeの項も参照)
199
+ #
200
+ # @option options [Boolean] :force (false)
201
+ #
202
+ # `true`を指定すると既存の同名のテーブルが
203
+ # 存在していても、強制的にテーブルを作成する。
204
+ #
205
+ # @option options [Groonga::Context] :context (Groonga::Context.default) The context
206
+ #
207
+ # スキーマ定義時に使用する {Groonga::Context} を指定する。
208
+ #
209
+ # @option options :path The path
210
+ #
211
+ # テーブルを保存するパスを指定する。
212
+ # パスを指定すると永続テーブルになる。
213
+ #
214
+ # @option options :persistent (true) The persistent
215
+ #
216
+ # テーブルを永続テーブルとする。`:path`を省略した場合は
217
+ # パス名は自動的に作成される。デフォルトでは永続テーブルとなる。
218
+ #
219
+ # @option options :value_type (nil) The value_type
220
+ #
221
+ # 値の型を指定する。省略すると値のための領域を確保しない。
222
+ # 値を保存したい場合は必ず指定すること。
223
+ #
224
+ # @option options :sub_records The sub_records
225
+ #
226
+ # `true`を指定すると{Groonga::Table#group}で
227
+ # グループ化したときに、{Groonga::Record#n_sub_records}でグループに
228
+ # 含まれるレコードの件数を取得できる。
229
+ #
230
+ # @!macro [new] schema.create_table.key_support.options
231
+ # @option options :key_type The key_type
232
+ #
233
+ # キーの種類を示すオブジェクトを指定する。キーの種類には型名
234
+ # (`"Int32"`や`"ShortText"`など)または {Groonga::Type}また
235
+ # はテーブル( {Groonga::Array} 、 {Groonga::Hash} 、
236
+ # {Groonga::PatriciaTrie} 、 {Groonga::DoubleArrayTrie} のど
237
+ # れか)を指定する。 {Groonga::Type} を指定した場合は、その
238
+ # 型が示す範囲の値をキーとして使用する。ただし、キーの最大サ
239
+ # イズは4096バイトであるため、 {Groonga::Type::TEXT} や
240
+ # {Groonga::Type::LONG_TEXT} は使用できない。テーブルを指定
241
+ # した場合はレコードIDをキーとして使用する。指定したテーブル
242
+ # の {Groonga::Record} をキーとして使用することもでき、その
243
+ # 場合は自動的に {Groonga::Record} からレコードIDを取得する。
244
+ # 省略した場合は文字列をキーとして使用する。この場合、4096バ
245
+ # イトまで使用可能である。
246
+ #
247
+ # @option options :default_tokenizer The default_tokenizer
248
+ #
249
+ # {Groonga::IndexColumn} で
250
+ # 使用するトークナイザを指定する。デフォルトでは
251
+ # 何も設定されていないので、テーブルに
252
+ # {Groonga::IndexColumn} を定義する場合は `"TokenBigram"`
253
+ # などを指定する必要がある。
254
+ #
255
+ # @option options [::Array<String, Groonga::Procedure>, nil]
256
+ # :token_filters (nil) The token filters to be used
257
+ # in the table.
258
+ #
259
+ # Here is an example to set two token filters.
260
+ #
261
+ # ```ruby
262
+ # Groonga::Schema.define do |schema|
263
+ # schema.create_table("Terms",
264
+ # # ...
265
+ # :token_filters => [
266
+ # "TokenFilterStem",
267
+ # "TokenFilterStopWord",
268
+ # ]) do |table|
269
+ # # ...
270
+ # end
271
+ # end
272
+ # ```
273
+ #
274
+ # @option options :key_normalize (false) Keys are normalized
275
+ # if this value is `true`.
276
+ #
277
+ # @deprecated Use `:normalizer => "NormalizerAuto"` instead.
278
+ #
279
+ # @option options [String, Groonga::Procedure, nil] :normalizer
280
+ # The normalizer that is used by {Groonga::IndexColumn}. You
281
+ # can specify this by normalizer name as String such as
282
+ # `"NormalizerAuto"` or normalizer object.
283
+ #
188
284
  # _options_ に指定可能な値は以下の通り。
285
+ #
189
286
  # @overload create_table(name, options= {:type => :array}, &block)
287
+ #
288
+ # @!macro [new] schema.create_table.array.description
289
+ # Create a table that manages records by ID when you specify
290
+ # `:array` to `:type`.
291
+ #
292
+ # You can identify a record only by record ID. You can't use
293
+ # key because key doesn't exist in the table.
294
+ #
295
+ # See description of `TABLE_NO_KEY` at [Groonga documentation
296
+ # of tables](http://groonga.org/docs/reference/tables.html)
297
+ # for details.
298
+ #
190
299
  # @!macro [new] schema.create_table.array.options
191
- # @param [::Hash] options The name and value
192
- # pairs. Omitted names are initialized as the default value.
193
- # @option options :force The force
194
- #
195
- # +true+ を指定すると既存の同名のテーブルが
196
- # 存在していても、強制的にテーブルを作成する。
197
- # @option options :type (:array) The type
198
- #
199
- # テーブルの型を指定する。
200
- # +:array+ , +:hash+ , +:patricia_trie+ ,
201
- # +:double_array_trie+ のいずれかを指定する。
202
- # (:key_typeの項も参照)
203
- # @option options [Groonga::Context] :context (Groonga::Context.default) The context
204
- #
205
- # スキーマ定義時に使用する {Groonga::Context} を指定する。
206
- # @option options :path The path
207
- #
208
- # テーブルを保存するパスを指定する。
209
- # パスを指定すると永続テーブルになる。
210
- # @option options :persistent (true) The persistent
211
- #
212
- # テーブルを永続テーブルとする。 +:path+ を省略した場合は
213
- # パス名は自動的に作成される。デフォルトでは永続テーブルとなる。
214
- # @option options :value_type (nil) The value_type
215
- #
216
- # 値の型を指定する。省略すると値のための領域を確保しない。
217
- # 値を保存したい場合は必ず指定すること。
218
- # @option options :sub_records The sub_records
219
- #
220
- # +true+ を指定すると {Groonga::Table#group} で
221
- # グループ化したときに、 {Groonga::Record#n_sub_records} でグループに
222
- # 含まれるレコードの件数を取得できる。
300
+ # @!macro schema.create_table.common.options
301
+ #
302
+ # @!macro schema.create_table.array.description
223
303
  # @!macro schema.create_table.array.options
224
304
  #
225
305
  # @overload create_table(name, options= {:type => :hash}, &block)
226
- # @!macro [new] schema.create_table.hash.options
227
- # @param [::Hash] options The name and value
228
- # pairs. Omitted names are initialized as the default value.
229
- # @option options :force The force
230
- #
231
- # +true+ を指定すると既存の同名のテーブルが
232
- # 存在していても、強制的にテーブルを作成する。
233
- # @option options :type (:array) The type
234
- #
235
- # テーブルの型を指定する。
236
- # +:array+ , +:hash+ , +:patricia_trie+ ,
237
- # +:double_array_trie+ のいずれかを指定する。
238
- # (:key_typeの項も参照)
239
- # @option options [Groonga::Context] :context (Groonga::Context.default) The context
240
- #
241
- # スキーマ定義時に使用する {Groonga::Context} を指定する。
242
- # @option options :path The path
243
- #
244
- # テーブルを保存するパスを指定する。
245
- # パスを指定すると永続テーブルになる。
246
- # @option options :persistent (true) The persistent
247
- #
248
- # テーブルを永続テーブルとする。 +:path+ を省略した場合は
249
- # パス名は自動的に作成される。デフォルトでは永続テーブルとなる。
250
- # @option options :value_type (nil) The value_type
251
- #
252
- # 値の型を指定する。省略すると値のための領域を確保しない。
253
- # 値を保存したい場合は必ず指定すること。
254
- # @option options :sub_records The sub_records
255
- #
256
- # +true+ を指定すると {Groonga::Table#group} で
257
- # グループ化したときに、 {Groonga::Record#n_sub_records} でグループに
258
- # 含まれるレコードの件数を取得できる。
259
- # @option options :key_type The key_type
260
- #
261
- # キーの種類を示すオブジェクトを指定する。
262
- # キーの種類には型名("Int32"や"ShortText"など)または {Groonga::Type}
263
- # またはテーブル( {Groonga::Array} 、 {Groonga::Hash} 、
264
- # {Groonga::PatriciaTrie} 、 {Groonga::DoubleArrayTrie} の
265
- # どれか)を指定する。 {Groonga::Type} を指定した場合は、その型が示す範囲の
266
- # 値をキーとして使用する。ただし、キーの最大サイズは4096バイトで
267
- # あるため、 {Groonga::Type::TEXT} や {Groonga::Type::LONG_TEXT} は使用できない
268
- # 。テーブルを指定した場合はレコードIDをキーとして使用する。
269
- # 指定したテーブルの {Groonga::Record} をキーとして使用することもでき、
270
- # その場合は自動的に {Groonga::Record} からレコードIDを取得する。
271
- # 省略した場合は文字列をキーとして使用する。
272
- # この場合、4096バイトまで使用可能である。
273
- # @option options :default_tokenizer The default_tokenizer
274
- #
275
- # {Groonga::IndexColumn} で
276
- # 使用するトークナイザを指定する。デフォルトでは
277
- # 何も設定されていないので、テーブルに
278
- # {Groonga::IndexColumn} を定義する場合は @"TokenBigram"@
279
- # などを指定する必要がある。
280
- #
281
- # @option options :key_normalize (false) Keys are normalized
282
- # if this value is @true@.
283
- #
284
- # @deprecated Use @:normalizer => "NormalizerAuto"@ instead.
285
- #
286
- # @option options [String, Groonga::Procedure, nil] :normalizer
287
- # The normalizer that is used by {Groonga::IndexColumn}. You
288
- # can specify this by normalizer name as String such as
289
- # @"NormalizerAuto"@ or normalizer object.
290
- # @!macro schema.create_table.hash.options
291
- #
292
- # @overload create_table(name, options= {:type => :patricia_trie}, &block)
293
- # @!macro [new] schema.create_table.patricia_trie.options
294
- # @param [::Hash] options The name and value
295
- # pairs. Omitted names are initialized as the default value.
296
- # @option options :force The force
297
306
  #
298
- # +true+ を指定すると既存の同名のテーブルが
299
- # 存在していても、強制的にテーブルを作成する。
300
- # @option options :type (:array) The type
307
+ # @!macro [new] schema.create_table.hash.description
308
+ # Create a table that manages record keys by hash table when
309
+ # you specify `:hash` to `:type`.
301
310
  #
302
- # テーブルの型を指定する。
303
- # +:array+ , +:hash+ , +:patricia_trie+ ,
304
- # +:double_array_trie+ のいずれかを指定する。
305
- # (:key_typeの項も参照)
306
- # @option options [Groonga::Context] :context (Groonga::Context.default) The context
311
+ # You can identify a record by key. The table is most fast
312
+ # table for finding a record by key. But the table doesn't
313
+ # support advanced key search features such as common prefix
314
+ # search and range search.
307
315
  #
308
- # スキーマ定義時に使用する {Groonga::Context} を指定する。
309
- # @option options :path The path
316
+ # See description of `TABLE_HASH_KEY` at [Groonga documentation
317
+ # of tables](http://groonga.org/docs/reference/tables.html)
318
+ # for details.
310
319
  #
311
- # テーブルを保存するパスを指定する。
312
- # パスを指定すると永続テーブルになる。
313
- # @option options :persistent (true) The persistent
320
+ # @!macro [new] schema.create_table.hash.options
321
+ # @!macro schema.create_table.common.options
322
+ # @!macro schema.create_table.key_support.options
314
323
  #
315
- # テーブルを永続テーブルとする。 +:path+ を省略した場合は
316
- # パス名は自動的に作成される。デフォルトでは永続テーブルとなる。
317
- # @option options :value_type (nil) The value_type
324
+ # @!macro schema.create_table.hash.description
325
+ # @!macro schema.create_table.hash.options
318
326
  #
319
- # 値の型を指定する。省略すると値のための領域を確保しない。
320
- # 値を保存したい場合は必ず指定すること。
321
- # @option options :sub_records The sub_records
327
+ # @overload create_table(name, options= {:type => :patricia_trie}, &block)
322
328
  #
323
- # +true+ を指定すると {Groonga::Table#group} で
324
- # グループ化したときに、 {Groonga::Record#n_sub_records} でグループに
325
- # 含まれるレコードの件数を取得できる。
329
+ # @!macro [new] schema.create_table.patricia_trie.description
330
+ # Create a table that manages record keys by patricia trie
331
+ # when you specify `:patricia_trie` to `:type`.
326
332
  #
327
- # @option options :key_normalize (false) Keys are normalized
328
- # if this value is @true@.
333
+ # You can identify a record by key. The table is most small
334
+ # table. The table supports advanced key search features such
335
+ # as prefix search and range search. The table is suitable for
336
+ # lexicon of full-text search and index of range search.
329
337
  #
330
- # @deprecated Use @:normalizer => "NormalizerAuto"@ instead.
338
+ # See description of `TABLE_PAT_KEY` at [Groonga documentation
339
+ # of tables](http://groonga.org/docs/reference/tables.html)
340
+ # for details.
331
341
  #
332
- # @option options [String, Groonga::Procedure, nil] :normalizer
333
- # The normalizer that is used by {Groonga::IndexColumn}. You
334
- # can specify this by normalizer name as String such as
335
- # @"NormalizerAuto"@ or normalizer object.
342
+ # @!macro [new] schema.create_table.patricia_trie.options
343
+ # @!macro schema.create_table.common.options
344
+ # @!macro schema.create_table.key_support.options
336
345
  #
337
- # @option options :key_with_sis The key_with_sis
346
+ # @option options [Boolean] :key_with_sis (false)
338
347
  #
339
348
  # +true+ を指定するとキーの文字列の
340
349
  # 全suffixが自動的に登録される。
350
+ #
351
+ # @!macro schema.create_table.patricia_trie.description
341
352
  # @!macro schema.create_table.patricia_trie.options
353
+ #
342
354
  # @overload create_table(name, options= {:type => :double_array_trie})
343
- # :typeに:double_array_trieを使用した場合
355
+ #
356
+ # @!macro [new] schema.create_table.double_array_trie.description
357
+ # Create a table that manages record keys by double array trie
358
+ # when you specify `:double_array_trie` to `:type`.
359
+ #
360
+ # You can identify a record by key. The table is fast table
361
+ # for finding a record by key. But the table is large. The
362
+ # table supports advanced key search features such as prefix
363
+ # search and range search.
364
+ #
365
+ # The table is the only table that supports renaming key. The
366
+ # table is used in Groonga database to manage object names
367
+ # such as `ShortText` and `TokenBigram`.
368
+ #
369
+ # See description of `TABLE_DAT_KEY` at [Groonga documentation
370
+ # of tables](http://groonga.org/docs/reference/tables.html)
371
+ # for details.
372
+ #
344
373
  # @!macro [new] schema.create_table.double_array_trie.options
345
- # @param options [::Hash] The name and value
346
- # pairs. Omitted names are initialized as the default value.
347
- # @option options :force The force
348
- #
349
- # +true+ を指定すると既存の同名のテーブルが
350
- # 存在していても、強制的にテーブルを作成する。
351
- # @option options [Groonga::Context] :context The context
352
- #
353
- # スキーマ定義時に使用する {Groonga::Context} を指定する。
354
- # 省略した場合は {Groonga::Schema.new} で指定した
355
- # {Groonga::Context} を使用する。 {Groonga::Schema.new} で指
356
- # 定していない場合は {Groonga::Context.default} を使用する。
357
- # @option options :path The path
358
- #
359
- # テーブルを保存するパスを指定する。パスを指定すると
360
- # 永続テーブルになる。
361
- # @option options :persistent (true) The persistent
362
- #
363
- # テーブルを永続テーブルとする。 +:path:+ を省略した場
364
- # 合はパス名は自動的に作成される。デフォルトでは永続
365
- # テーブルとなる。
366
- # @option options :value_type The value_type
367
- #
368
- # 値の型を指定する。省略すると値のための領域を確保しない。
369
- # 値を保存したい場合は必ず指定すること。
370
- # 参考: {Groonga::Type.new}
371
- # @option options :sub_records The sub_records
372
- #
373
- # +true+ を指定すると {Groonga::Table#group} でグループ化
374
- # したときに、 {Groonga::Record#n_sub_records} でグループに
375
- # 含まれるレコードの件数を取得できる。
376
- #
377
- # @option options :key_normalize (false) Keys are normalized
378
- # if this value is @true@.
379
- #
380
- # @deprecated Use @:normalizer => "NormalizerAuto"@ instead.
381
- #
382
- # @option options :key_type The key_type
383
- #
384
- # キーの種類を示すオブジェクトを指定する。
385
- # キーの種類には型名("Int32"や"ShortText"など)または
386
- # {Groonga::Type} またはテーブル( {Groonga::Array} 、
387
- # {Groonga::Hash} 、 {Groonga::PatriciaTrie} 、
388
- # {Groonga::DoubleArrayTrie} のどれか)を指定する。
389
- #
390
- # {Groonga::Type} を指定した場合は、その型が示す範囲の
391
- # 値をキーとして使用する。ただし、キーの最大サイズは
392
- # 4096バイトであるため、 {Groonga::Type::TEXT} や
393
- # {Groonga::Type::LONG_TEXT} は使用できない。
394
- #
395
- # テーブルを指定した場合はレコードIDをキーとして使用
396
- # する。指定したテーブルの {Groonga::Record} をキーとし
397
- # て使用することもでき、その場合は自動的に
398
- # {Groonga::Record} からレコードIDを取得する。
399
- #
400
- # 省略した場合は文字列をキーとして使用する。この場合、
401
- # 4096バイトまで使用可能である。
402
- # @option options :default_tokenizer The default_tokenizer
403
- #
404
- # {Groonga::IndexColumn} で使用するトークナイザを指定する。
405
- # デフォルトでは何も設定されていないので、テーブルに
406
- # {Groonga::IndexColumn} を定義する場合は
407
- # @"TokenBigram"@ などを指定する必要がある。
408
- #
409
- # @option options [String, Groonga::Procedure, nil] :normalizer
410
- # The normalizer that is used by {Groonga::IndexColumn}. You
411
- # can specify this by normalizer name as String such as
412
- # @"NormalizerAuto"@ or normalizer object.
374
+ # @!macro schema.create_table.common.options
375
+ # @!macro schema.create_table.key_support.options
376
+ #
377
+ # @!macro schema.create_table.double_array_trie.description
413
378
  # @!macro schema.create_table.double_array_trie.options
414
379
  def create_table(name, options={}, &block)
415
380
  define do |schema|
@@ -688,13 +653,16 @@ module Groonga
688
653
  # とに注意すること。
689
654
  #
690
655
  # @overload create_table(name, options= {:type => :array}, &block)
656
+ # @!macro schema.create_table.array.description
691
657
  # @!macro schema.create_table.array.options
692
658
  # @overload create_table(name, options= {:type => :hash}, &block)
659
+ # @!macro schema.create_table.hash.description
693
660
  # @!macro schema.create_table.hash.options
694
661
  # @overload create_table(name, options= {:type => :patricia_trie}, &block)
662
+ # @!macro schema.create_table.patricia_trie.description
695
663
  # @!macro schema.create_table.patricia_trie.options
696
664
  # @overload create_table(name, options= {:type => :double_array_trie})
697
- # :typeに:double_array_trieを使用した場合
665
+ # @!macro schema.create_table.double_array_trie.description
698
666
  # @!macro schema.create_table.double_array_trie.options
699
667
  def create_table(name, options={})
700
668
  definition = TableDefinition.new(name, @options.merge(options || {}))
@@ -881,7 +849,7 @@ module Groonga
881
849
  # 値の圧縮方法を指定する。省略した場合は、圧縮しない。
882
850
  #
883
851
  # - :zlib := 値をzlib圧縮して格納する。
884
- # - :lzo := 値をlzo圧縮して格納する。
852
+ # - :lz4 := 値をLZ4圧縮して格納する。
885
853
  def column(name, type, options={})
886
854
  definition = self[name, ColumnDefinition]
887
855
  if definition.nil?
@@ -1223,6 +1191,7 @@ module Groonga
1223
1191
  :type, :path, :persistent,
1224
1192
  :key_type, :value_type, :sub_records,
1225
1193
  :default_tokenizer,
1194
+ :token_filters,
1226
1195
  :key_normalize, :key_with_sis,
1227
1196
  :named_path,
1228
1197
  :normalizer]
@@ -1264,10 +1233,17 @@ module Groonga
1264
1233
  :context => context,
1265
1234
  :sub_records => @options[:sub_records],
1266
1235
  }
1236
+ token_filters = @options[:token_filters]
1237
+ if token_filters
1238
+ token_filters = token_filters.collect do |token_filter|
1239
+ normalize_type(token_filter)
1240
+ end
1241
+ end
1267
1242
  key_support_table_common = {
1268
1243
  :key_type => normalize_key_type(@options[:key_type] || "ShortText"),
1269
1244
  :key_normalize => @options[:key_normalize],
1270
1245
  :default_tokenizer => normalize_type(@options[:default_tokenizer]),
1246
+ :token_filters => token_filters,
1271
1247
  :normalizer => normalize_type(@options[:normalizer]),
1272
1248
  }
1273
1249
 
@@ -1343,13 +1319,22 @@ module Groonga
1343
1319
  when Groonga::Hash, Groonga::PatriciaTrie, Groonga::DoubleArrayTrie
1344
1320
  key_type = normalize_key_type(options[:key_type])
1345
1321
  return false unless table.domain == resolve_name(key_type)
1322
+
1346
1323
  default_tokenizer = normalize_type(options[:default_tokenizer])
1347
1324
  default_tokenizer = resolve_name(default_tokenizer)
1348
1325
  return false unless table.default_tokenizer == default_tokenizer
1326
+
1327
+ token_filters = options[:token_filters] || []
1328
+ token_filters = token_filters.collect do |token_filter|
1329
+ resolve_name(normalize_type(token_filter))
1330
+ end
1331
+ return false unless table.token_filters == token_filters
1332
+
1349
1333
  normalizer = normalize_type(options[:normalizer])
1350
1334
  normalizer ||= default_normalizer_name if options[:key_normalize]
1351
1335
  normalizer = resolve_name(normalizer)
1352
1336
  return false unless table.normalizer == normalizer
1337
+
1353
1338
  if table.is_a?(Groonga::PatriciaTrie)
1354
1339
  key_with_sis = options[:key_with_sis]
1355
1340
  key_with_sis = false if key_with_sis.nil?