【问题标题】:Custom Sorting of Solr Facet Values - Rails & Sunspot SolrSolr Facet 值的自定义排序 - Rails 和 Sunspot Solr
【发布时间】:2013-08-19 19:04:41
【问题描述】:

我正在使用 Sunspot Solr 进行分面搜索。但是,在尝试显示按所需顺序排序的构面值时,我遇到了问题。我的产品的尺码可能是(S、M、L、XL、XXL),有些产品的尺码可能是鞋码(8、9、10、11、12、13)。当将 facet.sort 方法设置为 'index' 时,它会将字符串值按字母顺序排列,从而分别产生 [L, M, S, XL, XXL] 和 [10, 11, 12, 8, 9]。什么是实现这些目标的自定义排序方法的好方法?

我的控制器:

@search = Product.search do
    fulltext params[:search]
    facet(:size, :sort => :index)
    with(:size, params[:size]) if params[:size].present?
end

我的观点:

<% for row in @search.facet(:brand).rows %>
    <li>
        <% if params[:brand].blank? %>
            <%= link_to link_to "#{row.value} (#{row.count})", params.merge({:brand => row.value}) %>
        <% else %>
            <strong><%= row.value %></strong> (<%= link_to "remove", params.merge({:brand => nil}) %>)
        <% end %>
    </li>
<% end %>

显示的结果排序

   SIZE 
L (10)
M (10)
S (10)
XL (10)
XXL (10)

【问题讨论】:

    标签: ruby-on-rails sorting sunspot sunspot-rails facets


    【解决方案1】:

    正如您所提到的,Solr 只接受两个方面的排序值,count(结果数)和 index(字典序)。假设您不想更改索引数据,您有两种选择,手动排序 facets 数组,或创建自定义查询 facet。我会选择前者,因为您的构面结果集非常有限。

    手动排序

    # supposing these are your possible sizes
    SCALE = %w(S M L XL XXL) 
    # once you perform your search sort based on the scale order
    @search.facet(:size).rows.sort_by! { |r| SCALE.index(r.value) }
    

    查询方面

    @search = Product.search do
      fulltext params[:search]
      facet(:size) do
        row('S') { with(:size, 'S') }
        row('M') { with(:size, 'M') }
        row('L') { with(:size, 'L') }
        row('XL') { with(:size, 'XL') }
        row('XXL') { with(:size, 'XXL') }
      end
      with(:size, params[:size]) if params[:size].present?
    end
    

    【讨论】:

    • 谢谢,效果很好!我选择了 Query facet 方法,因为我无法使手动排序正常工作(错误 - NilClass 与 2 的比较失败)。我会在这里为你 +1,但由于我是新来的堆栈溢出,它还不允许我这样做。
    • 我的猜测是某些产品没有尺寸,因此索引将为空并且比较会失败。但很高兴听到另一种选择有效。
    猜你喜欢
    • 2012-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多