2

全文検索にpg_searchを使用しています。検索語を入力すると正常に機能しますが、空の文字列を指定すると、すべてのモデルが返されると期待され、結果が得られません。

空の検索ですべてのモデルを返すようにpg_search_scopeを構成するにはどうすればよいですか?

ありがとうございました

4

1 に答える 1

4

これがhttps://github.com/Casecommons/pg_search/issues/49からの私の答えです


いくつかの理由から、空のクエリがあると常にすべてのレコードがトリガーされるとは思いません。

まず、レコードを返すための明確な順序があるとは思いません。(通常の検索ランクによる並べ替えは、クエリがないと意味がありません)

次に、データベースは、さまざまな検索機能が空白の文字列を処理する方法を定義して、すべてのロジックが1か所に存在するようにする必要があると思います。

したがって、この回避策を提供したいと思います。これは、お客様の状況により適していると思います。

class MyModel < ActiveRecord::Base
  include PgSearch

  pg_search_scope :search_by_name, :against => :name

  def self.search(query)
    if query.present?
      search_by_name(query)
    else
      # No query? Return all records, newest first.
      order("created_at DESC")
    end
  end
end

このソリューションは引き続きチェーン可能である必要があるため、コントローラーでこのようなものを安全に呼び出すことができます(kaminariのようなページ付けライブラリを使用していると仮定します。

MyModel.where(:published => true).search(params[:query]).page(params[:page])
于 2012-08-14T00:58:25.020 に答える