Ruby on rails Solr方面值的自定义排序-Rails和Sunspot Solr
我正在使用太阳黑子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]。实现自定义排序方法以实现这些目标的好方法是什么 我的控球手:Ruby on rails Solr方面值的自定义排序-Rails和Sunspot Solr,ruby-on-rails,sorting,sunspot,sunspot-rails,facets,Ruby On Rails,Sorting,Sunspot,Sunspot Rails,Facets,我正在使用太阳黑子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 par
@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 %>
正如您所提到的,Solr只接受两个方面的排序值,结果计数和索引字典。假设您不想更改索引数据,您有两种选择,手动对facets数组排序,或创建自定义查询facet。我会选择前者,因为您的方面结果集非常有限 人工分拣 查询方面
正如您所提到的,Solr只接受两个方面的排序值,结果计数和索引字典。假设您不想更改索引数据,您有两种选择,手动对facets数组排序,或创建自定义查询facet。我会选择前者,因为您的方面结果集非常有限 人工分拣 查询方面
谢谢,这很有效!我选择了查询方面的方法,因为我无法使手动排序正常工作。错误-将NilClass与2进行比较失败。我想在这里+1你,但由于我是新的堆栈溢出,它还不允许我。我猜有些产品没有大小,因此索引将为空,比较将失败。但很高兴听到另一种选择奏效了。谢谢,这很有效!我选择了查询方面的方法,因为我无法使手动排序正常工作。错误-将NilClass与2进行比较失败。我想在这里+1你,但由于我是新的堆栈溢出,它还不允许我。我猜有些产品没有大小,因此索引将为空,比较将失败。但很高兴听到另一种选择奏效了。
SIZE
L (10)
M (10)
S (10)
XL (10)
XXL (10)
# 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