2017-07-26 5 views
0

私はID、データ、およびデータ型を持つSphinx-Index-Tableを持っています。Group ByとGroup_ConcatでSphinxsearchを実行する方法

| 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 

は私の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' . '*'); 

sphinxapi.phpを使用していますこのように、

| objectid |  types   | 
|----------------|--------------------| 
|  10  | title, description | 

残念ながら、それはエラーがスローされます。

THROWS ERR: can not aggregate non-scalar attribute 'type' 

Iは、多値帰属が問題の可能な解決策であるかもしれないことを読んで、私は実際にこれが働いているかを理解didntの。

+0

'datatype'とは何ですか?あなたのテーブルにはデータ型はありません。 – akond

+0

私の実際のインデックステーブルでは、その型はデータ型と呼ばれます。それを編集した – steedz

答えて

0

スフィンクスでは、スカラー(例:整数)以外のフィールドに集約することはできません。私は、typeフィールドが何らかの参考値であると仮定しています。あなたが別のテーブルを使用することができ、type_dictionaryを言う:

1 title 
2 desctiption 
3 date 

とあなたのメインテーブルにそのインデックスを使用します。

sphinxid ... type 
1   1 
2   3 
3   2 

この場合GROUP_CONCATが働くだろう。

+0

ありがとう、それは動作するようです – steedz

関連する問題