我有一个带有id,数据和数据类型的Sphinx-Index-Table。
| sphinxid | objectid | data | type |
|----------------|----------------|----------------|-------------|
| 1 | 10 | Lorem ipsum | title |
|----------------|----------------|----------------|-------------|
| 2 | 10 | dolor si ipsum | description |
|----------------|----------------|----------------|-------------|
| 3 | 20 | dolor sit amet | date |
现在我尝试运行类似于这个工作的mysql查询的搜索查询:
SELECT objectid, GROUP_CONCAT(type) AS types
FROM SphinxIndex
WHERE data LIKE '%ipsum%'
GROUP BY objectid
这是我使用sphinxapi.php的PHP代码
$cl = new SphinxClient();
$cl->SetServer("localhost", 9312);
$cl->SetMatchMode(SPH_MATCH_EXTENDED);
$cl->SetLimits(0, 1000);
$cl->SetRankingMode(SPH_RANK_SPH04);
// THROWS ERR: can not aggregate non-scalar attribute 'datatype'
$cl->SetSelect("objectid, GROUP_CONCAT(type) AS types");
//----------------------------------------------
$cl->SetGroupBy('objectid', SPH_GROUPBY_ATTR, '@count DESC');
$cl->SetSortMode(SPH_SORT_EXTENDED, "@count DESC");
$searchresults = $cl->Query('*' . 'ipsum' . '*');
我的预期结果是这样的,
| objectid | types |
|----------------|--------------------|
| 10 | title, description |
但不幸的是它引发了一个错误:
THROWS ERR: can not aggregate non-scalar attribute 'type'
我读到多值归因可能是问题的可能解决方案,但我并不真正了解这是如何运作的。
答案 0 :(得分:0)
Sphinx不允许您聚合不是标量的字段(例如整数)。我假设type
字段是针对某种参考值的。您可以使用另一个表格,例如type_dictionary
:
1 title
2 desctiption
3 date
并在主表中使用其索引:
sphinxid ... type
1 1
2 3
3 2
在这种情况下,GROUP_CONCAT
可以正常工作。