Tasuku SUENAGA
a****@razil*****
2010年 1月 19日 (火) 14:29:15 JST
すえながです。
>> おそらく、Groonga::Table#define_index_columnを使わないといけないと思うの
>> ですが、あんまり使い方が分かっていなかったりします…
>> 助言いただけると幸いです。
> (snip)
> user_table.define_index_column('community_index', community_table,
> {:persistent => true, :source => "users"})
>
> ただ、実際は動かないのですが。。。
おおおー…
define_index_columnを「追記」する形なんですね。
> 動かない理由は、↓のクエリ文字列「2」が数値の「2」ではなく文
> 字列の「2」としてパースされるからです。
>
> recs = community_table.select("users:@2")
>
> これは、groonga本体側の話なのですが、どこでキャストするのが
> いいんでしょう。scan_info_build()?
キャストの問題だとすると、proc_selectでfilterパラメータに与えれば大丈夫、
という感じでしょうか。
現在、Ruby/groongaにはproc_selectのfilterパラメータ相当を与えて
検索を行うインターフェースってありましたっけ。
> ということで、クエリ文字列を使わずに以下のようにすると動きま
> す。
>
> recs = community_table.select {|r| r['users'] =~ user_table.find(2)}
おおおー。ありがとうございます。
これで思い出した別件なのですが、
主キーが数値型のGroonga::Recordに対して、
key_num = 1
record[key_num]
的な参照をしたいなーと思います。
現在は、[]/[]=について、
Numeric型の場合には_idで、それ以外の場合には_keyでlookupしていると思います。
_idを陽に扱う場合はほとんどないと思うので、_keyでのlookupに統一されると嬉しいな、
と思ったりしたのですが、どうでしょうか。
外部参照の場合にはアクセサを使いそうですし…
どうでしょうか。
---
末永 匡 <a****@razil*****>