我需要 sphinx 按属性的总和对结果进行排序。我需要:
- 按 ID 对结果进行分组(完成)
- 按一个属性的 SUM 对结果进行排序
我找不到对这个属性求和的方法。我怎么能这样做?
(我使用狮身人面像 PHP API)
Sphinx 从 0.9.9-rc2 版本开始支持聚合函数(sum、avg、min、max)。检查来自www.sphinxsearch.com/docs/current.html的文档
与前面的答案相呼应,在 Sphinx 查询中是不可能的。虽然表达式语法允许在排序中进行某种级别的计算,但它没有任何聚合函数。除非您将该总和值存储为一个属性(这可能是一个选项 - 在索引期间计算它),否则它必须是每条记录的单独 SQL 查询。
据我所知,这在当前的 Sphinx 版本中是不可能的。group by 函数旨在返回 group by 属性(即项目组的不同属性)、该组中的计数以及该组中的“顶部”项目。
最好的选择是在 Sphinx 之外进行求和。您可以按属性按组执行 Sphinx 搜索排序,然后在 PHP 中遍历这些项目,并在进行时求和。这种方法可能效率不高,因此可能需要定期缓存以减少服务器负载。