【问题标题】:SphinxQL: How to SUM() custom field with GROUP BY or RANK results by custom fieldSphinxQL:如何使用 GROUP BY 或自定义字段对结果进行 SUM() 自定义字段
【发布时间】:2016-05-16 09:42:01
【问题描述】:

我有一个具有下一个结构的索引:

+----+-----------+---------+--------------+
| id | entity_id | content | weight_field |
+----+-----------+---------+--------------+
| 1  | 1         | car     | 1.2          |
+----+-----------+---------+--------------+
| 2  | 1         | desert  | 1.45         |
+----+-----------+---------+--------------+
| 3  | 1         | water   | 1.55         |
+----+-----------+---------+--------------+
| 4  | 2         | water   | 1.1          |
+----+-----------+---------+--------------+
| 5  | 2         | desert  | 1.9          |
+----+-----------+---------+--------------+

有人可以告诉我SUM() 字段值是否可以分组? 我试过这个

SELECT SUM(weight_field) AS sort, entity_id FROM test_index WHERE MATCH ('@content car|desert|water') GROUP BY entity_id ORDER BY sort DESC

但出现错误:

syntax error, unexpected '(', expecting $end near '()'

我希望得到下一个结果:

+------+-----------+
| sort | entity_id |
+------+-----------+
| 4.2  | 1         |
+------+-----------+
| 3.0  | 2         |
+------+-----------+

第二种方法对我有好处: 使用自定义weight_field(包含1.563、1.02 等浮点值)对结果进行排名。但我不确定是否可以这样做

OPTION ranker=...

【问题讨论】:

    标签: php sum aggregate sphinx sphinxql


    【解决方案1】:

    所以,我终于找到原因了:

    在实际代码中,而不是在示例中,我将weight_field 命名为weight。所以 sphinx 将其识别为预定义的 FUNCTION WEIGHT() 并抛出错误,表明它想在 weight 之后看到 ()。

    修复它并重新建立索引后它可以工作。

    【讨论】:

    • 啊是的 WEIGHT 将有效地保留字。
    • 顺便说一句,可以使用weight作为别名
    【解决方案2】:

    我相信

    SELECT SUM(WEIGHT()) AS sort,...
    

    应该可以。 WEIGHT() 在哪里是当前排名计算的值。

    【讨论】:

    • 是的,也许你是对的。但是是否可以将我自己的字段weight_field 设置为 WEIGHT() 的结果?
    猜你喜欢
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多