[groonga-dev,03898] Re: インデックスを使用してbetween関数を使う

Back to archive index

Yutaro Shimamura yu****@irx*****
2016年 2月 2日 (火) 13:26:32 JST


矢田さん

> ここを column_create test time COLUMN_SCALAR Time としていただければ大丈夫なはずです.
> データ型を idx_time から Time に変更しただけです.

すいません、数値インデックスの作成方法を根本から間違えてました。。
この方法で問題なく作成し、関数を使うことが出来ました!

実は全文検索以外のインデックス作成方法がうまくみつからず、
http://redmine.groonga.org/issues/766
この方法を参考にしていました。


table_create test TABLE_HASH_KEY ShortText
column_create test time COLUMN_SCALAR Time
table_create idx_time TABLE_PAT_KEY Time
column_create idx_time test_time COLUMN_INDEX test time

今後はこの方法でインデックスを作っていこうと思います。

ありがとうございました!

2016-02-02 3:12 GMT+01:00 Susumu Yata <yata****@razil*****>:
> Groonga 5.1.2 を使ってます!
> 矢田です.
>
>> この使い方をする場合、なにかテーブル作成時に実行しておくことや、filter条件の書き方を変える必要があるのでしょうか?
>
> テーブル test のカラム time の型がテーブル idx_time への参照になっていることが原因のようです.
>
>> column_create test time COLUMN_SCALAR idx_time
>
> ここを column_create test time COLUMN_SCALAR Time としていただければ大丈夫なはずです.
> データ型を idx_time から Time に変更しただけです.
>
> 私の環境でも,上の方法で作成すると同様のエラーになりました.
>
>> select test --filter 'between(time,1234567890,"include",1234567892,"include")'
> [[-22,1454378590.07384,0.00195026397705078,"between(): failed to cast
> min: <1234567890> -> <idx_time>",[["between_cast","proc.c",4986]]],[]]
>
> 下の方法で作成すれば,問題なく実行できました.
>
>> select test --filter 'between(time,1234567890,"include",1234567892,"include")'
> [[0,1454378637.96945,0.00219058990478516],[[[2],[["_id","UInt32"],["_key","ShortText"],["time","Time"]],[1,"test1",1234567890.12],[2,"test2",1234567891.12]]]]
>
> 以上,お試しいただけますでしょうか.
> よろしくお願いします.
>
>
> 2016年2月2日 4:37 Yutaro SHIMAMURA <yu****@irx*****>:
>>
>> groonga 5.0.9を使ってます!
>>
>> between関数を使うときに、対象のカラムがTime型/Int型だとうまく実行できない問題にぶつかりました。
>>
>> table_create idx_time TABLE_PAT_KEY Time
>> table_create test TABLE_HASH_KEY ShortText
>> column_create test time COLUMN_SCALAR idx_time
>> column_create idx_time test_time COLUMN_INDEX test time
>>
>>
>> load --table test
>> [
>> ["_key","time"],
>> ["test1",1234567890.12],
>> ["test2",1234567891.12],
>> ["test3",1234567892.12]
>> ]
>>
>>
>> この内容でbetween関数を使って絞り込みを実行しようとしたところ、between関数内部でエラーになってしまい、実行できませんでした。
>>
>>> select test --filter 'between(time,1234567890,"include",1234567892,"include")'
>> [[-22,1454354516.15522,0.000474214553833008,"between(): failed to cast min: <1234567890> -> <idx_time>",[["between_cast","proc.c",5570]]],[]]
>>
>> 試しにidx_timeをUint64で作成して実行しましたが、同じエラーで失敗しました。
>>
>> [[-22,1454354741.43699,0.000444650650024414,"between(): failed to cast min: <1> -> <idx_time>",[["between_cast","proc.c",5570]]],[]]
>>
>>
>> この使い方をする場合、なにかテーブル作成時に実行しておくことや、filter条件の書き方を変える必要があるのでしょうか?
>> _______________________________________________
>> groonga-dev mailing list
>> groon****@lists*****
>> http://lists.osdn.me/mailman/listinfo/groonga-dev
>
>
>
> --
> Susumu Yata <yata****@razil*****>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.osdn.me/mailman/listinfo/groonga-dev



groonga-dev メーリングリストの案内
Back to archive index