SphinxQL: Как суммировать () произвольное поле с результатами GROUP BY или RANK по настраиваемому полю

У меня есть индекс со следующей структурой:

+----+-----------+---------+--------------+
| 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=...

1

Решение

Итак, я в конце концов нахожу причину:

В реальном коде, а не в примере, я назвал weight_field как weight, Таким образом, сфинкс распознал его как предопределенную функцию WEIGHT() и выкинуть ошибку которая говорит что хочет увидеть () после weight,

После исправления и повторной индексации все работает.

1

Другие решения

я верю

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

должно сработать. Где WEIGHT() это значение, рассчитанное текущим ранкером.

0

По вопросам рекламы [email protected]