如何使用Searchkick分别搜索多个字段?

时间:2018-12-16 18:13:05

标签: ruby-on-rails elasticsearch ruby-on-rails-5 searchkick

我开始在我的Rails 5应用程序中使用Searchkick gem(Elasticsearch)。 目前,我在公司标题的搜索字段中。我想添加一个单独的下拉列表以分别搜索位置。

这是一个看起来像的例子:

example form

这是我当前的解决方案,适用于标题搜索。但是我在添加位置搜索时遇到了问题。

控制器:

...

 def index
  query = params[:q].presence || "*"
  @companies = Company.search(query, fields: [:title], match: :word_start, page: params[:page], per_page: 6)
 end

...

def company_params
  params.require(:company).permit(:title, :location)
end

这是我的index.html.erb

<%= form_tag companies_path, method: :get do %>
  <%= text_field_tag :q, nil, class: "form-control", placeholder: "Search" %>
<% end %>

我知道必须更改控制器和视图。以下是该视图的无效示例:

<%= form_tag companies_path, method: :get do %>
  <%= text_field_tag :q, nil, class: "form-control" %>
  <%= select_tag :location, options_from_location_field_for_select(Location.all ..?) %>
  <%= submit_tag "Search" %>
<% end %>

1 个答案:

答案 0 :(得分:0)

在我看来,您只需要一个where子句即可。

query = params[:q].presence || "*"
location = params[:location].presence || "*"

Company.search(
  query, 
  fields: [:title], 
  match: :word_start, 
  where: { location: location }, 
  page: params[:page], 
  per_page: 6
)