sunspot_solr facet在Ruby on Rails中不起作用

时间:2018-02-04 11:06:39

标签: ruby-on-rails ruby solr

我有一个简单的应用程序,使用Rails 5,我使用太阳黑子solr进行方面搜索,一切正常,但方面不工作我的代码如下:

model.rb

searchable do
    text :full_name, :interested_topics,:interested_job, :city, :email, :username, :publish_month
    text :city
    time :created_at
    string :publish_month
    string :interested_job
end

def publish_month
    created_at.strftime("%B %Y")
end

def full_name
    first_name + ' ' + last_name
end

controller.rb

@search = User.search do |searcher|

    fields = [:full_name, :interested_topics, :interested_job, :city, :email, :username, :publish_month] 
    cities = [:city] 

    searcher.any do
        fulltext params[:search], :fields => fields
        fulltext params[:city], :fields => cities
    end

    searcher.with(:created_at).less_than(Time.zone.now)
    searcher.with(:publish_month, params[:month]) if params[:month].present?
    searcher.with(:interested_job, params[:position]) if params[:position].present?

    searcher.paginate(:page => params[:page], :per_page => 15)
    end
    @users = @search.results

index.html.erb

<div id="facets">
    <%= render partial: "filter" %>
</div>

index.js.erb的

$('#facets').html('<%= escape_javascript(render("filter")) %>');

_filter.html.erb

<h4>Browse by Publish</h4>
<ul class="list-group">
    <% for row in @search.facet(:publish_month).rows -%>
        <li class="list-group-item">
            <input type="checkbox" class="facet-check-box-month" name="month" value="<%= row.value %>" <%= params[:month] == row.value ? "checked" : "" %>> 
            <%= row.value %> 
            (<%= row.count %>)
        </li>
    <% end -%>
</ul>

<h4>Browse by Interest</h4>
<ul class="list-group">
    <% for row in @search.facet(:interested_job).rows -%>
        <li class="list-group-item">
            <input type="checkbox" class="facet-check-box-position" name="position" value="<%= row.value %>" <%= params[:position] == row.value ? "checked" : "" %>> 
            <%= row.value %> 
            (<%= row.count %>)
        </li>
    <% end -%>
</ul>

复选框显示为facet,但是当我点击而非查询时。

我做错了什么?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您错过了facet来自控制器的呼叫,您可以将这两行添加到最后一行上方的User块中,例如searcher.paginate(:page => params[:page], :per_page => 15)

searcher.facet(:publish_month)
searcher.facet(:interested_job)

然后重新启动sunspot:solr服务器,我认为它会起作用。

为了更好,在filter部分使用unless @search.nil?时,如果找不到任何结果,则会显示修改后的复选框

<% unless @search.nil?  %>

    <h4>Browse by Publish</h4>
    <ul class="list-group">
        <% for row in @search.facet(:publish_month).rows -%>
            <li class="list-group-item">
                <input type="checkbox" class="facet-check-box-month" name="month" value="<%= row.value %>" <%= params[:month] == row.value ? "checked" : "" %>> 
                <%= row.value %> 
                (<%= row.count %>)
            </li>
        <% end -%>
    </ul>

    <h4>Browse by Interest</h4>
    <ul class="list-group">
        <% for row in @search.facet(:interested_job).rows -%>
            <li class="list-group-item">
                <input type="checkbox" class="facet-check-box-position" name="position" value="<%= row.value %>" <%= params[:position] == row.value ? "checked" : "" %>> 
                <%= row.value %> 
                (<%= row.count %>)
            </li>
        <% end -%>
    </ul>

<% end %>

希望有所帮助