Расчет релевантности с помощью Match ... Against в запросах JOIN (MySQL)
Я пытаюсь получить релевантные результаты поиска, используя следующий запрос JOIN:
SELECT
`products`.`id`,
`brands`.`name` AS `brand`,
`products`.`name` AS `productname`,
MATCH (`brands`.`name`) AGAINST ('somebrand someproduct' ) AS brandname_relevance
FROM
`brands`
INNER JOIN
`products` ON `products`.`brand_id` = `brands`.`id`
WHERE
MATCH (`products`.`name`) AGAINST ('somebrand someproduct' ) AS /* AS is highlighted as 'not valid input at this point' */ product_relevance
ORDER BY (brandname_relevance + product_relevance) DESC
Однако, как отмечается в коде, "AS" выделен как недопустимый в этом контексте MySQL Workbench. Запрос не выполняется.
Механизм в обеих таблицах - InnoDB, однако Версия сервера MySQL выше 5.6, и индекс FULLTEXT включен для обоих brands.name
а также products.name
, Пожалуйста, объясните, в чем здесь проблема.
1 ответ
Решение
Это в предложении where - переместите его вверх вместе с другими полями в вашем выборе.
SELECT
`products`.`id`,
`brands`.`name` AS `brand`,
`products`.`name` AS `productname`,
MATCH (`brands`.`name`) AGAINST ('somebrand someproduct' ) AS brandname_relevance,
MATCH (`products`.`name`) AGAINST ('somebrand someproduct' ) AS product_relevance
FROM
`brands`
INNER JOIN
`products` ON `products`.`brand_id` = `brands`.`id`
ORDER BY (brandname_relevance + product_relevance) DESC