在狮身人面像上按道路(不是地理)上城市到城市的距离对文档进行排序

sorting documents by distance from city to city on the roads (not geo) on the sphinx

我有一个有趣的问题。

鉴于:

我需要按文档与我所在城市的距离升序对文档进行排序。

例如:

我有文档:Doc1 - CityA、Doc2 - CityD、Doc3 - CityB、Doc4 - CityX、Doc5 - CityC

我需要在下一次排序中获取文档:

文件 5, 文件1, 文档2, Doc3

本来我是打算这样解决问题的:

创建一个分类器 if (cityid = 945,5, if (cityid = 2050,4, if (cityid = 652,3, if (cityid = 2654,2, if (cityid = 734,1,0)))) ) 作为 sorter_cityid0

然后排序。

看起来都不错。

但是到了真正的问题上,嵌套条件变得很大,出现了错误

解析器堆栈溢出 NEAR

OK,尽量不要破坏几个排序器:

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 , 如果 (cityid = 785,1,0))))) 作为 sorter_cityid3 ....

但是接下来有一个新的限制

排序依据属性太多;最大计数为 5

在示例中,我没有指定完整嵌入

而问题是:你遇到过这个问题吗,如何解决的?

分别考虑每个城市,分页时考虑城市是什么并计算我必须在页面上显示的城市?

例如:第1页-1.2的城市

第 25 页 - 我认为那是在第一页上,有多少文件,如果你 运行 出城 - 去下一个城镇,等等,直到我们到达我们的页面 ...

P.S.

地理搜索不适合,因为道路上使用的是距离,而不是坐标

如果您使用的是 SphinxAPI(而不是 SphinxQL),建议使用 SetOverride 方法。这能够处理长列表。

对于 SphinxQL,有 REMAP() 函数 http://sphinxsearch.com/docs/current.html#misc-functions 但我不知道它能处理多少个值。

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

如果城市数量较少and/or固定,可以添加一列作为当前文档到其他城市的预计算距离。然后在排序时 select 正确的列。