MySqlバージョン5.0.45で全文クエリを使用しており、ニーズに合わせて最適化しようとしています。スコアシステムは正常に機能していましたが、入力の前にステマーを追加したため、検索語にワイルドカードを使用する必要がありました。問題は、ステミングされた単語が一致するが、スコアが0になることです(つまり、「restriction」はステミングされて「restrict」になり、一致として認識されますが、スコアは0になります)。
クエリは次のとおりです。
$escaped_string = mysql_real_escape_string($string);
$query = "SELECT DISTINCT A1.item_ID, item,
4.0 * (match (`item_1`) against ('". $escaped_string."*'))
+ 3.5 * (match (`item_2`) against ('".$escaped_string."*'))
+ 3.0 * (match (`item_3`) against ('".$escaped_string."*'))
+ 2.5 * (match (`item_4`) against ('".$escaped_string."*'))
+ 1.5 * (match (`item_5`) against ('".$escaped_string."*'))
as score
FROM Items A1 LEFT OUTER JOIN Inventory A2 ON A1.item_ID=A2.item_ID
WHERE MATCH(`item_1`, `item_2`,`item_3`,`item_4`,`item_5`) AGAINST ('".$escaped_string."*' IN BOOLEAN MODE)
ORDER BY score DESC
LIMIT 200";
('".$escaped_string."'))
スコアは、ワイルドカード*を追加したときではなく、前に完全に計算されます。どちらの場合も、マッチングは正常に機能します。問題は、ワイルドカードがある場合にスコアが計算されないことです。
これに関するどんな助けもいただければ幸いです!(私はこれをほぼ正しく行っていることを願っています)