[groonga-dev,01109] Re: Time型のインデックスについて

アーカイブの一覧に戻る

Kouhei Sutou kou****@clear*****
2012年 11月 26日 (月) 07:13:55 JST


須藤です。

In <97d8c3c5-6813-3541-a7ca-01eaac7505a6 @ api106>
  "[groonga-dev,01108] Re: Re: Time型のインデックスについて" on Thu, 22 Nov 2012 18:18:48 +0900,
  hirano_verf****@mail***** wrote:

> Int型カラムに対してのインデックス作成、完全一致検索(==)での高速化はできていたので、Time型の範囲指定も高速化できるだろうと試行錯誤していたところでした。
> 
> 機能追加まで検討していただき感謝いたします。
> リリース楽しみにしております。

範囲検索も高速になる機能はリポジトリに入ったので、次のリリー
スにも含まれる予定です!次のリリースでは、他にも検索機能が強
化される予定なので、楽しみにしていてください。

あと、注意事項なのですが、groongaでは「一番最初に値を設定する
ときは、初期値と同じ値を設定してもインデックスが更新されない」
という制限があります。初期値は型毎に違うのですが、Int32や
TimeなどInt*、UInt*、Timeなど数値型は「0」が初期値です。

なので、↓のようにopen_dateに最初の値として「0」を設定しても
インデックスが更新されません。

>> 	Groonga[table_name].add('shop_001', :shop_name => 'kyoto', :open_date => 0, :close_date => 1325343599) # 〜2011/12/31
>> 	Groonga[table_name].add('shop_002', :shop_name => 'nagoya', :open_date => 0, :close_date =>  1356965999) # 〜2012/12/31
>> 	Groonga[table_name].add('shop_003', :shop_name => 'hakata', :open_date => 1356966000, :close_date =>  1388501999) # 2013/01/01〜2013/12/31

代わりに、↓のように「0」じゃなくて(初期値とは違う値の)「1」
を設定するか、

  Groonga[table_name].add('shop_001', :shop_name => 'kyoto', :open_date => 1, :close_date => 1325343599) # 〜2011/12/31

一度、違う値を設定してから「0」を設定してください。(一度、
初期値と違う値を設定していればインデックスは更新される。)

  shop = Groonga[table_name].add('shop_001', :shop_name => 'kyoto', :open_date => 1, :close_date => 1325343599) # 〜2011/12/31
  shop.open_date = 0


rroongaでこの制限を回避できないか検討してみますが、現状では
↑という制限があるので注意してください。

(groongaにこの制限があるのはgroongaにはNULLという概念がない
ということに由来しています。)

-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)

groongaサポート:
  http://groonga.org/ja/support/
パッチ採用はじめました:
  http://www.clear-code.com/recruitment/




groonga-dev メーリングリストの案内
アーカイブの一覧に戻る