Sunspotの検索結果を、小さい値から大きい値の順に価格で並べ替えようとしています。
order_by :price, :asc
ただし、価格値がゼロのアイテムもあります。結果の先頭に配置されます。それらを除外するのではなく、最後に表示する良い方法はありますか?
Sunspotの検索結果を、小さい値から大きい値の順に価格で並べ替えようとしています。
order_by :price, :asc
ただし、価格値がゼロのアイテムもあります。結果の先頭に配置されます。それらを除外するのではなく、最後に表示する良い方法はありますか?
schema.xmlの価格フィールドの定義に属性「sortMissingLast=true」を追加します
ええ、schema.xmlのフィールドにsortMissingLast=trueを追加する必要があります。次のようになります。
<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
schema.xmlのフィールドのfieldTypeでプロパティsortMissingLast="true"を使用します。
solrサーバーを再起動します。
(暗黙のデフォルト値はfalseです。)