Solr Hybris中能否对non facet属性排序?如何实现字段点击排序
结论先行
Solr Hybris 原生支持对非分面(non-facet)属性做升/降序排序,分面能力和排序能力是Solr字段两个独立的功能维度,不存在必须配置为分面字段才能排序的限制。
具体实现步骤
- Solr 层面字段校验
先确认4个日期字段在Solr schema中的配置符合排序要求:
- 字段类型使用日期专用类型(推荐
DatePointField,禁止使用分词文本类型存储日期,否则会按字符串字典序排序,结果完全不符合预期) - 字段开启
docValues="true",Solr 6及以上版本对非分词的基础类型字段默认开启该配置,老版本需要手动补充,这个配置是排序功能的核心依赖,和字段是否开启分面无关 - 不需要给这几个字段设置
facet="true",保持分面开关关闭即可
- Solr 层面字段校验
- Hybris 索引配置调整
在Hybris后台的Solr索引配置项中,将4个日期字段添加为商品类型的可索引属性:
- 每个字段绑定商品模型上对应的日期属性,设置唯一的Solr字段名,和Solr侧schema的字段名一一对应
- 属性的「是否作为分面」选项直接设为
false,不需要配置任何分面相关的规则、阈值 - 配置完成后触发一次全量索引,抽查索引文档确认4个字段的日期值已经正确写入Solr
- Hybris 索引配置调整
- 前后端排序逻辑对接
前端点击对应列表列头时,直接按标准Solr排序参数格式传递排序规则即可:
比如点击rolling start date1列触发升序时,排序参数传rollingStartDate1 asc,触发降序时传rollingStartDate1 desc,其余3个字段的参数逻辑完全一致。Hybris默认的Solr查询转换器会自动校验字段合法性、拼接排序语句,不需要额外开发适配。
- 前后端排序逻辑对接
避坑提示:如果项目里有自定义的Solr查询前置拦截逻辑,记得把这4个字段加入排序字段白名单,避免自定义逻辑误拦截非分面字段的排序请求;如果排序结果异常,优先排查字段类型是否用了文本类型、docValues是否正常开启、索引值是否正确写入。
内容的提问来源于stack exchange,提问作者Raushan Kumar
相关产品推荐
相关产品推荐

