我有一个有趣的问题。
假设:
我需要按照他们与我的城市的距离按升序排序文件。
例如:
我有文档:Doc1 - CityA,Doc2 - CityD,Doc3 - CityB,Doc4 - CityX,Doc5 - CityC
我需要在下一次排序中获取文档:
Doc5, 文档1, 文档2, 文档3
最初我打算按如下方式解决问题:
创建一个分拣机 if(cityid = 945,5,if(cityid = 2050,4,if(cityid = 652,3,if(cityid = 2654,2,if(cityid = 734,1,0))))) sorter_cityid0
然后对其进行排序。
像所有看起来都很好。但是当遇到真正的问题时,嵌套条件变得非常大并且存在错误
解析器堆栈溢出NEAR
好的,尽量不要打破几个分拣机:
if(cityid = 945,5,if(cityid = 2050,4,if(cityid = 652,3,if(cityid = 2654,2,if(cityid = 734,1,0))) ))as sorter_cityid0,if(cityid = 4372,5,if(cityid = 1123,4,if(cityid = 2657,3,if(cityid = 2655,2,if(cityid = 2052,1,0)))) )as sorter_cityid1,if(cityid = 790,5,if(cityid = 4373,4,if(cityid = 663,3,if(cityid = 475,2,if(cityid = 2651,1,0))))) as sorter_cityid2,if(cityid = 403,5,if(cityid = 1200,4,if(cityid = 855,3,if(cityid = 2669,2,if(cityid = 785,1,0)))))as as sorter_cityid3 ....
但是有一个新的限制
太多的排序属性;最大数量为5
在示例中,我没有指定完整的嵌入
问题是:您是否遇到过此问题以及如何解决?
分别考虑每个城市,并在分页时考虑城市是什么,并计算我必须在页面上显示哪个城市?
例如:第1页 - 一个1.2的城市
第25页 - 我想这是在第一页,有多少文件,如果你跑出城市 - 去下一个城镇,所以,直到我们到达我们的页面......
P.S。
geosearch不合适,因为距离用于道路,而不是坐标
答案 0 :(得分:2)
如果您使用的是SphinxAPI(而不是SphinxQL),则会推荐使用SetOverride
方法。这能够应付长名单。
对于SphinxQL,有REMAP()
函数
http://sphinxsearch.com/docs/current.html#misc-functions
但我不知道它可以应付多少价值。
最“可扩展”的解决方案可能是将数据重新格式化为JSON属性,然后可以直接对其进行排序。但这可能需要一些广泛的编码。
答案 1 :(得分:0)
如果城市数量较少和/或固定,您可以为当前文档与其他城市之间预先计算的距离添加一列。然后在排序时选择正确的列。