Я намагаюся мати оцінку для цілого розділу операторів SELECT
SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword')
UNION
SELECT *,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword')
UNION
SELECT *,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword')
У такому випадку бали складаються за таблицею + вони не впорядковуються за релевантністю
Але я спробував цей метод, який працює, але не вартує виробництва
SELECT * FROM (
SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword')
UNION
SELECT *,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword')
UNION
SELECT *,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword')
) as `combined` ORDER BY `score` DESC
Наведений вище код не любить, оскільки бали за таблицею з’єднуються та впорядковуються. Поганий підхід.
Так що я намагався MATCH() AGAINST()
для data
в TOP LEVEL SELECT , а це. (НЕ РОБОТИ)
SELECT *,MATCH(`data`) AGAINST('keyword') as `good_score` FROM (
SELECT *,`result` as `data`,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword')
UNION
SELECT *,`content` as `data`,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword')
UNION
SELECT *,`text` as `data`,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword')
) as `combined` ORDER BY `good_score` DESC
Наведене вище твердження ідеально підходить для мене, але воно не працює, тому що data
стовпець створений на ходу, і він не підтримує FULLTEXT INDEX.
Моє запитання - як продовжувати роботу мотора.
- Чи можете ви якось скласти
data
ФУЛЬТЕКСТ - Чи є якийсь спосіб змусити його працювати, крім IN BOOLEAN MODE, який не підтримує балів
- Чи є підхід до всієї цієї теми, який би змусив її працювати? Створення тимчасової таблиці це не вирішує, 50% правило MATCH () ПРОТИ () робить запит поверненням 0 результатів, але їх багато
- Можливо, є щось мало, що я сумую?
- Створення VIEW також не працює, MySQL не підтримує INDEX-і на VIEW.
- Можливо, це гарна ідея використовувати В БУЛЬСЬКИЙ РЕЖИМ і створити підрахунок вручну?
Я працюю над цим питанням більше двох днів. Тому я люб'язно прошу допомогу. Дякую.