Я пытаюсь получить оценку для всего раздела утверждений 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 () AGAINST () делает запрос, возвращающий 0 результатов, но их много
- Может быть, есть кое-что, что я скучаю?
- Создание VIEW также не работает, MySQL не поддерживает INDEX-es для VIEW.
- Может быть, это хорошая идея использовать IN BOOLEAN MODE и создавать оценки вручную?
Я работаю над этим вопросом более двух дней. Поэтому я прошу помощи. Спасибо.
источник