現在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");
私はこれを正しく行っていますか?