MYSQL を使用して、クエリによって返される各結果のスコアを生成しています。結果はスコア順に並べられます。
うまく機能していないように見える部分は、検索された各タグにスコアを追加して結果を割り当てようとしているときです。たとえば、「example」、「test」、および「tag」というタグを検索し、結果の 1 つが「example」、「test」、「someothertag」というタグに割り当てられているとします。スコアは 10 になるはずです。 2試合あるから。
実際に起こっていることは、一致するタグの数に関係なく、一致する場合は 5 のスコアを取得していることです。一致するタグがない場合は 0。
検索から生成されるクエリの 1 つの例を次に示します。
SELECT DISTINCT results.*,
(
5*(MATCH(tags.name) AGAINST('"self employed"' IN BOOLEAN MODE)) +
5*(MATCH(tags.name) AGAINST('"rental income"' IN BOOLEAN MODE)) +
5*(MATCH(tags.name) AGAINST('"commission income"' IN BOOLEAN MODE)) +
5*(MATCH(tags.name) AGAINST('"bankruptcy"' IN BOOLEAN MODE)) +
5*(MATCH(tags.name) AGAINST('"condo approval"' IN BOOLEAN MODE)) +
1*usefulness +
10*shares
) AS score
FROM results
INNER JOIN categories c on results.ID = c.RESULT_ID
INNER JOIN tags ON results.id = tags.result_id
WHERE c.name in ('purchase', 'condo', 'va')
AND ( tags.name = 'self employed' OR tags.name = 'rental income' OR tags.name = 'commission income' OR tags.name = 'bankruptcy' OR tags.name = 'condo approval' )
AND ( results.scope = 'all' OR results.scope = 'hi' )
AND published = 1
GROUP BY results.ID
having count(distinct c.c_id) = 3
ORDER BY score DESC
LIMIT 8 OFFSET 0