Kouhei Sutou
kou****@clear*****
2012年 11月 22日 (木) 16:37:30 JST
須藤です。 In <04714432-61e6-3f00-bc6a-d7c3afad9a5f @ api104> "[groonga-dev,01103] Time型のインデックスについて" on Thu, 22 Nov 2012 16:09:00 +0900, hirano_verf****@mail***** wrote: > Time型のカラムに対してrroongaから日付範囲指定で検索を行っています。 > より高速に検索するためにインデックスを作成したいと思っているのですが、作成することは可能でしょうか。 > また、可能であれば方法を教えていただけないでしょうか。 インデックスを作成することは可能なのですが、そのインデックス を使って高速に検索するということはできません。 が!今月末のリリースまでに、インデックスを使って高速に検索で きるようにしておこうと思います。 できるようになったら、以下のようなコードでインデックスを使っ て高速に検索できるようになります。 require "groonga" db_path = '/tmp/test/db' table_name = 'shop_list' Groonga::Context.default_options = {:encoding => :utf8} Groonga::Database.open(db_path) do |db| # テーブル作成 Groonga::Schema.create_table(table_name, :type => :hash, :key_type => "ShortText") do |t| t.short_text("shop_name") t.time("open_date") t.time("close_date") end # ここから追加 Groonga::Schema.create_table("Times", :type => :patricia_trie, :key_type => "Time") do |t| t.index(table_name, "open_date") t.index(table_name, "close_date") end # ここまで追加 # データセット 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 # 現在営業中の店舗を検索 records = Groonga[table_name].select do |record| ( record[:open_date] <= Time.now.to_i ) & ( record[:close_date] >= Time.now.to_i ) end end -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/