Kouhei Sutou
kou****@clear*****
2011年 9月 2日 (金) 19:09:02 JST
須藤です。 In <b7f09136-b4b3-38ac-8b90-6d05d4e7c42d @ api104> "[groonga-dev,00555] rroongaの演算子「!=」について" on Fri, 02 Sep 2011 18:43:25 +0900, hirano_verf****@mail***** wrote: > rronngaを利用して以下のように検索をかけています。 > > records = Groonga["user_table"].select do |record| > record[:user_id] == 12345 > end > > http://groonga.rubyforge.org/rroonga/ja/Groonga/Table.html#select-instance_method > を参照したのですが、「==」を「!=」に変更すると、 > > NoMethodError (undefined method `build' for false:FalseClass) > > とエラーになってしまいます。 > > 正確な記述方法を教えていただけないでしょうか。 実は、ブロック内では「!=」を使えないのです。 これはRuby 1.8の制限からきています。Ruby 1.8では「!=」という メソッドをオーバーライドできないため、上記のエラーメッセージ のように「false」(または「true」)が返ってしまいます。 Ruby 1.9では「!=」もオーバーライドできるため、rroongaとして はサポートできるのですが、まだそこには着手していないという状 況です。 今回のケースでは、以下のように検索式をgroongaにパースさせる ことにより同じことが実現できます。 records = Groonga["user_table"].select("user_id == 12345", :syntax => scrypt) で、groongaがパースする検索式の書式なんですが。。。 あ、前はrroongaのドキュメント内にも入れていたのですが、今は 抜けちゃっていますね。。。 ざっくりいうとJavaScript(ECMAScript)っぽい書式で検索式を書 けます。たとえば、以下のようにすれば、年齢が20才以上でたいや き好きなレコードを検索します。 age >= 20 && description @ "たいやき" 検索式の書き方は近いうちにgroongaかrroongaのドキュメントに入 れます。。。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)