狮身人面像,SUM(@weight)/ @计数

时间:2012-09-21 05:57:35

标签: group-by sphinx

我目前正在使用MySQL进行非常具体的查询

我的表结构是:

id : INT, primary KeY, AUTO_INCREMENT
occupationID : INT
alias : VARCHAR(255)

然后,我做了

SELECT occupationID, (MATCH(alias) AGAINST ('Web Developer' IN NATURAL LANGUAGE MODE) / count(*)) as score FROM aliases group by occupationID order by score DESC LIMIT 0,2;

此查询对每个ROW执行搜索,执行完整扫描,并根据匹配次数除以匹配项。这样,我获得了所有行的平均分数,给了我所需的准确性。

速度非常慢(20秒),记录表为50k。 (我并不感到惊讶,MySQL全文很慢......)。

使用Sphinx,我正在考虑使用此查询构建索引:

select id,occupationID,alias, (SELECT count(*) from aliases AS A WHERE B.occupationID=A.occupationID) as nb   from aliases AS B 

然后做一个

$sphinx->setSelect("@id, sum(@weight)/nb as score");
$sphinx->setGroupBy("occupationID", GROUP_BY_ATTR, "score DESC");

$sphinx->query("Web Developer");

我这样做了吗?

1 个答案:

答案 0 :(得分:1)

清除。我发现的唯一的异味是,在原始的mysql中,你通过OccupID分组。但在构建索引时,您使用id加入 - 这意味着count将是具有相同id的数字,而不是样本的占用ID。

我也不确定sum(@weight)是否适用于sphinx - 理论上它应该是,但是有一些奇怪的限制,所以不能确定没有测试。