斯芬克斯搜索排序/排名


Sphinx Search Sorting/Ranking

我最近刚刚发现了sphinx搜索,我想将其用于我的PHP应用程序。我有一个地理位置表,每个记录都存储一个国家代码。对于每一个使用搜索功能查找地理位置的用户,我都知道他来自哪个国家。

如何重新称重结果,使匹配结果与用户所在国家/地区的距离递增?我已经计算了每个国家之间的距离矩阵,我可以通过SQL访问它。地理位置数据库中的国家信息存储为2个字母的ISO国家代码。

什么是解决这个问题的好办法?我听说过UDF,它们适用于那个问题吗?通过重新格式化我的表可以更容易地解决这个问题吗?

非常感谢。

解决这一问题的"最简单"方法是为每个国家提供坐标。然后,您将每个记录的坐标存储在斯芬克斯索引中,在搜索时查找坐标并在搜索中使用它。斯芬克斯通过这种方式动态计算距离。

你有这样的坐标来创建矩阵吗?但它也再次证明,你只是在每个国家使用一个"点",如果你的矩阵更先进,例如在每个国家的边界上取最接近的点(以使形状奇怪的国家之间的分歧更好),那么它就不会那么好用。

理论上,你可以使用有效载荷,通过使用国家名称作为关键字,以及有效载荷中的距离(经过特殊安排,使近距离失踪具有较高的权重)来实现这一点,但索引成本可能很高,在实践中可能不会很好地工作。