Упорядочить результат 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;
Другие вопросы по тегам