Упорядочить результат sql по вхождению набора ключевых слов в строку
Для каждой строки я хочу получить релевантность каждого описания по сравнению с неопределенным количеством ключевых слов. Я знаю, что "THEN +1" не работает, но я хотел бы прийти к этому результату (... иметь число (начиная с 0 в каждой строке), которое увеличивается для каждого ключевого слова)
SELECT *,
(CASE description LIKE '%keyword1%' THEN +1
description LIKE '%keyword2%' THEN +1
(...)
ELSE 0
END) as relevance_description
FROM (...)
ORDER BY relevance_description DESC
Таким образом, если описание содержит "ключевое слово1" и "ключевое слово2", значение релевантности должно быть 2 для этой строки.
1 ответ
Решение
Вы можете сделать это с отдельными предложениями и сложить их вместе:
SELECT *,
((CASE description LIKE '%keyword1%' THEN 1 else 0 end) +
(case description LIKE '%keyword2%' THEN 1 else 0 end) +
. . .
) as relevance_description
FROM (...)
ORDER BY relevance_description DESC;
В некоторых базах данных логические значения рассматриваются как целые числа, поэтому вы можете просто написать:
SELECT *,
((description LIKE '%keyword1%') +
(description LIKE '%keyword2%') +
. . .
) as relevance_description
FROM (...)
ORDER BY relevance_description DESC;