[groonga-dev,00473] Re: referenceでの検索

Back to archive index

Kouhei Sutou kou****@clear*****
2011年 3月 31日 (木) 10:49:31 JST


須藤です。

In <e5d5b243-5474-3b63-af6f-79997a1a0c8b @ api103>
  "[groonga-dev,00472] Re: referenceでの検索" on Thu, 31 Mar 2011 09:47:37 +0900,
  "Endo Akira" <endo4****@goo*****> wrote:

>>   result = items.select{|r|
>>     r.pisrefs.jan =~ "123"
>>   }
> ああ、これでよかったのですか。そうかなと思わないでもなかったのですが、
> ちょっと気持ち悪くて書けませんでした。こう書けるのなら、普通に(?!)
> referenceのvectorが使えます。belongs_to、has_manyよりも直感的で使いやすいと
> 思います。

うぅ。いきなり見ると気持ち悪いですかぁ。
vectorになるとわからなくもないかも。。。

> grn式なるものが分からないので、ついruby式思考法になってしまいます。

(強引ですが)grn式はSQLのように「What」(どんな条件で絞り込
みたいか)を書いて、Rubyの式は「How」(どうやって絞り込みた
いか)を書く感じかもしれないです。

(メタプログラミング好き(?)の人っぽくいうと、「selectの中
はgrn式の内部DSL」という感じになります。)

>>   * 条件式を連結する
>> 
>>     例:
>>       # 東京に住んでいる太郎さんを検索
>>       (record.name == "太郎") & (record.address =~ "東京")
>>       # 東京か大阪に住んでい人を検索
>>       (record.address =~ "東京") | (record.address =~ "大阪")
> &&で連結していて、最後の条件式しか評価されず、しょうがないので、
> andの方はselectの結果を用いてさらにselectしていました。orの方は
> もっと苦労していました。ははは。これを今日質問するつもりでした。
> &はbit積という印象が強くて、改めてTrueClassほかを眺めたら、&などが
> 定義されていたのですね。

たしかに、ふだんは&ではなく&&を使うのですが、Rubyでは&&を再定
義できないので、&を使っています。。。

(&&は右側の式が評価されないこともあるけど、&は常に評価される
とか違いはあるのですが、grn式を作る部分は必ず評価しなければい
けないので&でいいかなぁというのもあったりします。)

> もう一つの"1"から"4"までの値しかとらない項目で、indexを作った方が
> 遅くなる、という問題は、あとでもう一度試してからご報告します。

はい!

> どうもありがとうございました。だんだんすっきりしていきます。

よかったです!

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

プログラミングが好きなソフトウェア開発者を募集中:
  http://www.clear-code.com/recruitment/




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