簡體   English   中英

Solr方面值的自定義排序-Rails和Sunspot Solr

[英]Custom Sorting of Solr Facet Values - Rails & Sunspot Solr

我正在使用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]。 什么是實現自定義排序方法以實現這些目標的好方法?

我的Contoller:

@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)

如前所述,Solr僅接受構面的兩個排序值:計數(結果數)和索引(字典序)。 假設您不想更改索引數據,則有兩種選擇,手動排序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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM