[英]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.