太阳黑子order_by排序,其中nil值为last

时间:2012-01-16 05:03:26

标签: solr sunspot sunspot-rails

我正在尝试按价格从较小值到较大值来订购太阳黑子搜索结果。

order_by :price, :asc

但是有些商品的价格没有。它们位于结果的前面。是否有一种很好的方法可以在最后显示它们而不是将它们排除在外?

3 个答案:

答案 0 :(得分:2)

将属性“sortMissingLast = true”添加到schema.xml中的price字段定义

答案 1 :(得分:0)

是的,您应该将schemaMissingLast = true添加到schema.xml中的字段,如下所示:

<schema name="sunspot" version="1.0">
  <types>
    ...
    <!-- My custom types -->
    <fieldType name="sml_int" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/>
  </types>
  <fields>
    ...
    <!-- My custom fields -->
    <dynamicField name="*_sml_int" type="sml_int" multiValued="false" indexed="true"/>
  </fields>
  ...
</schema>

然后在你的代码中你可以这样做:

class MyModel < ActiveRecord::Base
  searchable do
    integer :price, as: :price_sml_int
  end
end

答案 2 :(得分:0)

schema.xml 中字段的fieldType中使用属性 sortMissingLast =“ true”

重新启动solr服务器。

(隐式默认值为false。)