ono_matope
matop****@gmail*****
2010年 9月 12日 (日) 04:35:43 JST
お世話になっております、小野マトペです。 先ほど、rroonga検証中に、 Groonga::PatriciaTrie.create でcreateしたPatriciaTrieテーブルへのレコードの挿入が失敗する、 挿入出来たものも_keyが0になり、なおかつ_keyが非ユニーク という現象が発生しました。 以下に再現コードを添付します。 tmp_rroonga.rb =========================================================== # -*- coding: utf-8 -*- require 'groonga' $dbpath = "testdb"; begin Groonga::Context.default_options = {:encoding => :utf8} Groonga::Database.create(:path => $dbpath ) rescue => exc p exc end tweets = Groonga::PatriciaTrie.create( :name => "Tweets", :key_type => "UInt32", :persistent => true ) tweets.define_column( "text", "ShortText") tweets.add(5, :text => "主キーは5です。") tweets.add(6, :text => "主キーは6です。") tweets.add(7, :text => "主キーは7です。") tweets.add(8, :text => "主キーは8です。") tweets.add(20,:text => "主キーは20です。") tweets.add(30) p tweets.size tweets.each{|i| p "_id:"+i["_id"].to_s+", _key:"+i["_key"].to_s+", text:"+i["text"].to_s } ============================================================ 結果 ============================================================ 2 "_id:1, _key:0, text:主キーは5です。" "_id:2, _key:0, text:主キーは20です。" ============================================================ この現象は、主キー型がUInt64, UInt32, Int64,Int32 の時に確認され、ShortTextの時に確認されませんでした。 また、Hashテーブルの時には起こりませんでした。 一方、createをrroonga経由ではなくgroongaコマンドライン側で行った場合、意図通りの結果が得られました。 以下に成功時の再現コードを添付します。 table_create Tweets --flags TABLE_PAT_KEY --key_type UInt32 column_create Tweets text --flags COLUMN_SCALAR --type ShortText insert_rroonga.rb =========================================================== # -*- coding: utf-8 -*- require 'groonga' $dbpath = "testdb"; begin Groonga::Context.default_options = {:encoding => :utf8} db = Groonga::Database.open( $dbpath ) rescue => exc p exc end tweets = Groonga["Tweets"] tweets.add(5, :text => "主キーは5です。") tweets.add(6, :text => "主キーは6です。") tweets.add(7, :text => "主キーは7です。") tweets.add(8, :text => "主キーは8です。") tweets.add(20,:text => "主キーは20です。") tweets.add(30) p tweets.size tweets.each{|i| p "_id:"+i["_id"].to_s+", _key:"+i["_key"].to_s+", text:"+i["text"].to_s } =========================================================== 結果 =========================================================== 6 "_id:1, _key:5, text:主キーは5です。" "_id:2, _key:6, text:主キーは6です。" "_id:3, _key:7, text:主キーは7です。" "_id:4, _key:8, text:主キーは8です。" "_id:5, _key:20, text:主キーは20です。" "_id:6, _key:30, text:" =========================================================== rroongaの使い方がどこか間違っているでしょうか?ご指摘いただければ幸いです。 環境は CentOS 5.2 ruby-1.9.2 groonga-1.0.1 rroonga-1.0.0 です。