如何在Sphinx中获取属性的SUM?

时间:2017-09-18 03:33:29

标签: php sphinx

我在生产中运行Sphinx Search,使用关键字执行搜索,通过官方sphinxapi.php访问。现在我需要输出一个名为price的属性和搜索结果的总和,类似于SQL查询" SELECT SUM(t.price)from table_name t WHERE condition"。这些数据应该显示在网页上,例如"显示12345结果中的1 - 10,总费用是67890美元"。正如文档所述,当与GROUP BY一起使用时,SUM()函数可用。但是,文档没有提供有关实现,Google搜索和搜索的足够详细信息,Stackoverflow也没有多大帮助。

问题:

  1. 我应该如何对搜索结果进行分组?
  2. 可以使用1个Sphinx请求执行,还是必须先获取搜索结果,然后再次查询Sphinx以获取找到的文档的总和?
  3. 请指教。一个例子将非常有用。谢谢。

1 个答案:

答案 0 :(得分:0)

您需要运行第二个查询。 '总和'在WHOLE结果集上需要,而正常分组,每行运行聚合。在您的示例中,有一个隐式GROUP BY '1'聚合所有行。

因此需要使用分组在sphinx中执行相同操作。 http://sphinxsearch.com/docs/current.html#clustering

使用聚合函数相对容易,与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