[groonga-dev,03817] rroonga / 複数キーワードによる検索

Back to archive index

Masatoshi SEKI m_seki****@mva*****
2015年 12月 29日 (火) 22:15:58 JST


咳といいます。

rroongaで複数のキーワードからなる検索を書く方法を調べていて次のblogを読みました。

http://www.clear-code.com/blog/2009/7/31.html

injectとexpressionを使って次のようなコード片が出ています。

records = documents.select do |record|
  words.inject(nil) do |expression, word|
    sub_expression = record["content"] =~ word
    if expression.nil?
      sub_expression
    else
      expression & sub_expression
    end
  end
end



sub_expressionのクラスはExpressionBuilderでしたっけ?
これの & や | などがnilを引数に取るとき自分自身を返すようにしたら
次のように書けないでしょうか?

records = documents.select do |record|
  words.inject(nil) do |expression, word|
    (record["content"] =~ word) & expression
  end
end

&,|の対称性がなくなるのがイマイチならメソッド名を変えてもかまいませんし、
nilが不自然ならExpressionBuilder::NopとかSentinelとかTailとかでも…



複数キーワードの検索はよくありそうな処理なので、もっと簡単に書く方法はありますか?





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