MySQL только полнотекстовый поиск дает оценку выше нуля - PullRequest
0 голосов
/ 14 июля 2020

Если у меня есть такой полнотекстовый запрос:

SELECT title,
   MATCH(question) AGAINST ('string') AS q_score,
   MATCH(answer) AGAINST ('string') AS a_score,
   MATCH(keywords) AGAINST ('string') AS kw_score FROM helptable
   ORDER BY (4 * q_score) + (1 * a_score) + (2 * kw_score) DESC

Это работает, я получаю результат с рейтингом релевантности.

Однако мне не нужны какие-либо результаты с общей оценкой 0. Но когда я пытаюсь добавить что-то вроде:

   WHERE a_score > 0

, это не работает («# 1054 - Неизвестный столбец 'a_score' в 'where clause'»). Есть ли другой способ сделать это? Спасибо!

(MariaDB 10.4.10, таблица InnoDB)

1 Ответ

1 голос
/ 14 июля 2020

Вы можете использовать предложение having:

SELECT title,
       MATCH(question) AGAINST ('string') AS q_score,
       MATCH(answer) AGAINST ('string') AS a_score,
       MATCH(keywords) AGAINST ('string') AS kw_score
FROM helptable
HAVING a_score > 0
ORDER BY (4 * q_score) + (1 * a_score) + (2 * kw_score) DESC;

MySQL расширяет использование предложения HAVING, чтобы его можно было использовать в неагрегированных запросах. MySQL также позволяет использовать псевдонимы столбцов в предложении HAVING. Вуаля! Это делает то, что вы хотите.

Я не уверен, что вы имеете в виду под «комбинированным счетом», но вы также можете добавить дополнительные условия:

HAVING a_score > 0 OR kw_score > 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...