【发布时间】:2015-12-20 22:44:39
【问题描述】:
我正在构建一个 API,它使用 Sunspot 作为后端的搜索引擎并实现分面搜索。对于我如何为我的所有内容处理许多不同的构面类型,我有以下模型:
Contents
content_name
searchable_fields
Facets
facet_name
ContentFacets
content_id
facet_id
虽然内容有_许多方面,但内容方面。我已经设法设置好一切,让它作为一个单面搜索工作——作为 API,它返回它需要的所有内容,当前端应用程序发回必要的参数时,它会向下钻取一个方面,但是,我不能让它从那里做多个方面。这是我所做的搜索(再次,这是有效的):
#SearchController
facet_id = Facet.find_by_name(params[:commit]).id
@search = Content.search do
fulltext params[:search]
with(:facet_ids, facet_id) if params[:commit].present?
facet(:facet_ids)
paginate :page => 1, :per_page => 300
end
facets = @search.facet(:facet_ids).rows.map { |row| row.instance.name }
render :json => [facets, @search.results]
然后是如何配置的内容模型:
searchable do
text :searchable_fields
integer :facet_ids, :multiple => true, :references => Facet
end
最后,这是在查询我的 API 的前端应用程序上的处理方式:(看起来好像前面的参数作为路由本身的参数传回,而 :commit 参数来自submit_tag 是确定特定方面名称的内容)
<% if @facets %>
<div id="facets">
<h3>Given - <%= @search_params %></h3>
<ul>
<% @facets.each do |facet| %>
<%= form_tag facet_path(@search_params), method: "POST" do %>
<li><%= submit_tag facet %></li>
<% end %>
<% end %>
</ul>
</div>
所以我的问题是:考虑到一切,我将其变成实际的多方面搜索的最佳方式是什么,而不是只使用一个方面并在每次选择新方面时都覆盖它?
【问题讨论】:
标签: ruby-on-rails sunspot faceted-search