我有一个非常具体的查询,我目前正在使用 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;
此查询对每一行执行搜索,进行全面扫描,然后将匹配项除以其出现次数。这样,我得到了所有行的平均分数,从而达到了我需要的准确性。
这非常慢(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");
我这样做对吗?