【问题】最近测试人员反馈我们的solr查询功能在排序上出现排序混乱的问题!我们都知道solr提供有排序语法,本人也是使用solr自带排序语法进行排序。难道solr作为如此成熟稳定的产品也会有这么低级的设计缺陷吗?
【原因】经过数据一通比对发现是因为我们排序的字段类型是string类型,string类型的排序规则是按字典序。例如4、23、13 按照从大到小排序结果为 4>23>13。至此原因就分析出来了。那么如何解决?
【解决方案】目前我们的数据结构比较混乱,solr中存储的数据种类各式各样,存在一个Field中存储数字类型、日期类型、字符串类型,所以只能选择包容性更强的string类型作为字段的存储类型。那么目前就剩两个解决方案:
方案1:修改solr中的字段类型为数字类型,目前这种满足不了我们数据存储的需求只好放弃。看官们根据实际情况选择。
方案2:利用函数在进行排序时转换成数字类型,类似java中的toInt等方法。看官可以移步本人之前的一篇关于编写自定义函数的文章https://developer.aliyun.com/article/873755?spm=a2c6h.13148508.0.0.b31f4f0e4NCFej
【最终效果】图1为使用函数,图2为不使用函数