2017-09-18 11 views
0

私は、公式のsphinxapi.phpからアクセスできる、キーワードで検索を実行して、スフィンクスサーチを運用中に実行しています。今度は、SQLクエリ "SELECT SUM(t.price)from table_name t WHERE condition"と同様に、検索結果とともにpriceという属性の合計を出力する必要があります。このデータは、「12345件の結果のうち1〜10件を表示し、合計費用は$ 67890」のようなWebページに表示されるはずです。ドキュメントにあるように、GROUP BYと一緒に使用するとSUM()関数を使用できます。しかし、ドキュメントでは、実装、グーグル、検索について十分な詳細が提供されていません。Stackoverflowはあまり役に立ちません。Sphinxで属性のSUMを取得する方法は?

質問:

  1. どのように私はグループの検索結果をすべきか?
  2. 1回のSphinxリクエストで実行できますか、最初に検索結果を取得してからSphinxに再度問い合わせて、見つかったドキュメントの合計を取得する必要がありますか?

助言してください。例が本当に役に立ちます。ありがとうございました。

答えて

0

2番目のクエリを実行する必要があります。 'sum'はWHOLE結果セットでは必要ですが、通常のグループ化では、集計は1行ごとに実行されます。あなたの例では、すべての行を集約する暗黙のGROUP BY '1'があります。

したがって、sphinxで同じことを行うには、グループ化を使用する必要があります。

集計関数を使用するのは比較的簡単ですが、setSelectで使用しますが、SetGroupByにはすべての行をグループ化する構文があり、エミュレートする必要があります。

//all normal setup need for normal query here 
$cl->SetLimits($offset,$limit); 
$cl->AddQuery($query, $index); 

//add the group query 
$cl->setSelect("1 as one, SUM(price) as sum_price"); 
$cl->setGroupBy("one",SPH_GROUPBY_ATTR); //dont care about sorting 
$cl->setRankingMode(SPH_RANK_NONE); //no point actually ranking results. 
$cl->SetLimits(0,1); 
$cl->AddQuery($query, $index); 

//run both queries at once... 
$results = $cl->RunQueries(); 

var_dump($results); 
//$results[0] contains the normal text query results, use its total_found 
//$results[1] second contains just the SUM() data 

これは、マルチクエリとしても設定されています。 http://sphinxsearch.com/docs/current.html#multi-queries

関連する問題