0

データベース内の3つのフィールドを検索するために、基本的な検索機能を構築しました。検索機能は次のとおりです。

def self.search(search)
  if search
    @search_out = Array.new
    @prod_out = find(:all, :conditions => ['name ILIKE ? or supplier_code ILIKE ? or    ppd_code ILIKE ?', "%#{search}%", "%#{search}%", "%#{search}%"])
      @prod_out.each do |prod| 
        prod.quantities.each do |quants|
          @search_out << quants
        end
      end
      return @search_out
  else
    nil
  end
end

これですべてうまく機能しましたが、DBに「JackandJillMovie」と「JackandJanetMovie」という名前のエントリがあると言うオプションを追加したいと思います。検索フィールドに「JackMovie」と入力すると、 "、両方のエントリが返されます。

全体として、検索フィールドで単語を検索し、それらの単語が連続していないエントリも受信する機能。ありがとう!

4

3 に答える 3

1

さて、私は実際にこれを行うための非常に簡単な方法を見つけました。

「検索」自体の前に、これを関数に追加しました。

@arr = search.split(' ')
@arr.collect! {|x| x + "%" }
search = @arr.join

このようにして、ワイルドカードを与える各単語の間に「%」を追加します。これで、ワイルドカードが間にあるため、必ずしも連続していない単語を見つけることができます。

于 2012-09-19T14:30:29.657 に答える
0

Mysqlの正規表現機能を使用することをお勧めします

some_query.where("name REGEXP ?", "#{search.split(' ').join(".*")}")

正規表現で使用する前に、検索文字列から正規表現の特殊文字を除外する必要があることは明らかです。

それについてのmysqlドキュメント

于 2012-09-13T12:15:11.367 に答える
0

SolrSphinxなどのフル機能の検索エンジンがいくつかあり、 SunspotThinking Sphinxなどのgemを使用して、Railsアプリに簡単に統合できます。Postgresには検索エンジンも組み込まれているため、セットアップが簡単な場合があります。これはより強力ですが、同時により複雑なソリューションです。

それぞれの概要を知りたい場合は、Railscastsがそのための優れたリソースです。

于 2012-09-13T12:47:32.020 に答える