[groonga-dev,00843] Re: rroonga での scoreの設定方法

Back to archive index

Shinya Kawaji kawaj****@gmail*****
2012年 5月 10日 (木) 16:36:34 JST


川路です


>   result_set = Groonga["Site"].select
>   # ↑が--filter "1"相当
>   result_set.select("_score = rand() && false", :syntax => :script)
>   # ↑が--scorer "_score = rand()"相当
>   result_set.sort(["_score"])
>   # ↑が--sortby "_score"相当

ありがとうございます。なるほど、そのような書式をすると分かりました。
まだ試せていないですが、やってみます。


> と、こんな感じで書けるとRubyっぽいかなぁというのを思いつきま
> した。
> 
>   result_set.execute do |record|
>     record.score = record.eval do
>       # この中のselfは外のselfじゃなくして、
>       # groonga内の関数(geo_distance)などがレシーバーなし
>       # で使えるようにする。
>       # ブロック内でselfをすり替えるのは直感的じゃないので好
>       # きじゃないけどevalという名前にすれば、まぁ、いいかなぁと。
>       geo_distance(location, "128515259x503187188")
>     end
>   end

善し悪しはよく分からないのですが、selfをすり替えることだけが問題であれば、
ブロック引数を「関数を受け付けるためだけのレシーバ」にすることになります
でしょうか。

  result_set.execute do |record|
    record.score = record.eval do |exec|
      exec.geo_distance(location, "128515259x503187188")
    end
  end

しかし、:syntax => :script を使った方法は分かりましたので、書式について
は「良いものを思いついてから」で良いかもしれません。

よろしくお願いします。




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