在狮身人面像的道路上(不是地理位置)按城市到城市的距离对文件进行分类

时间:2015-02-27 08:03:33

标签: sorting sphinx

我有一个有趣的问题。

假设:

  • “我的城市”
  • 文件清单
  • 城市列表和它们之间的距离

我需要按照他们与我的城市的距离按升序排序文件。

例如:

  • 我在cityX
  • 我有以下城市: CityA - 50,CityB - 350,CityC - 10,CityD - 321

我有文档: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不合适,因为距离用于道路,而不是坐标

2 个答案:

答案 0 :(得分:2)

如果您使用的是SphinxAPI(而不是SphinxQL),则会推荐使用SetOverride方法。这能够应付长名单。

对于SphinxQL,有REMAP()函数 http://sphinxsearch.com/docs/current.html#misc-functions 但我不知道它可以应付多少价值。

最“可扩展”的解决方案可能是将数据重新格式化为JSON属性,然后可以直接对其进行排序。但这可能需要一些广泛的编码。

答案 1 :(得分:0)

如果城市数量较少和/或固定,您可以为当前文档与其他城市之间预先计算的距离添加一列。然后在排序时选择正确的列。