[groonga-dev,00556] Re: rroongaの演算子「!=」について

Back to archive index

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)




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