Я нахожу это довольно трудным для объяснения, поэтому, пожалуйста, расскажите мне обо мне здесь...
Я использую MYSQL для создания оценки для каждого результата, возвращаемого запросом. Затем результаты упорядочиваются по результату.
Часть, которая, похоже, не работает должным образом, - это когда я пытаюсь добавить оценку для каждого найденного тега, а результат назначен. Так что скажем, что я выполняю поиск тегов "example", "test" и "tag", и один из моих результатов присваивается тегам "example", "test", "someothertag", который должен принести оценку 10 так как есть 2 совпадения.
Что на самом деле происходит, я получаю оценку 5, если есть совпадение, независимо от того, сколько тегов сопоставлено. и 0, если теги не совпадают.
Ниже приведен пример одного из запросов, созданных при поиске.
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