0

Rails アプリで検索を処理するために ES と Searchkick gem を使用しています。私は現在やっています:

class Paper < ActiveRecord::Base
  belongs_to :report
  belongs_to :user
  before_destroy :delete_dependant_papers

  searchkick word_start: [:realname]
end

これはうまく機能しますが、すべての列に不必要にインデックスを付けています。「実名」列のみにインデックスを付けたい。

search_dataその後、Searchkick GitHubページに出くわしました。これにより、特定の列のみにインデックスを付けることができます。

class Product < ActiveRecord::Base  
def search_data
    as_json only: [:name, :active]
    # or equivalently
    {
      name: name,
      active: active
    }
  end
end

これらの両方をどのように組み合わせますか?realname と word_start を使用して 1 つの列だけにインデックスを付けるにはどうすればよいでしょうか?

4

1 に答える 1

0

search_datarealnameメソッドを使用すると、インデックスを作成できword_start、データを部分的に一致させることができます。したがって、モデルは次のようにする必要があります。

class Paper < ActiveRecord::Base
  belongs_to :report
  belongs_to :user
  before_destroy :delete_dependant_papers

  searchkick word_start: [:realname]

  def search_data
    as_json only: [:realname]
  end
end

メソッドPaper.reindexを変更した後、コンソールを呼び出す必要があります。search_data

于 2015-03-19T09:24:27.690 に答える