Mysql Match Against query - отображать соответствующее ключевое слово в результате

Не уверен, что это возможно

У меня есть набор из 100 ключевых слов, и я выполняю запрос MATCH AGAINST, чтобы увидеть, присутствуют ли эти ключевые слова в таблице. Запрос работает нормально:

SELECT * FROM questions_new WHERE MATCH (question_title,question)
AGAINST ('depreciation amortization npv dcf "discounted cash flow" "cash flow statement" "current assets"' IN BOOLEAN MODE);

Это всего лишь пример запроса с несколькими ключевыми словами.

Результаты возвращаются следующим образом:

question_id | question_title            |  question
    1       | what is depreciation      |  I am trying to do this DCF calculation......
    2       | Need help with this       |  what is a cash flow statement
    3       | Cannot solve this problem |  Can you give more examples on npv

Это примерный набор результатов. Очевидно, мой набор результатов намного больше.

Теперь посмотрим на вопросник или вопрос - мне очень трудно узнать, какое ключевое слово было найдено, так как список ключевых слов огромен.

Мне было интересно, возможно ли мне включить ключевое слово matched в набор результатов, как показано ниже

question_id |        keyword      | question_title            |  question
    1       | depreciation, DCF   | what is depreciation      |  I am trying to do this DCF calculation......
    2       | cash flow statement | Need help with this       |  what is a cash flow statement
    3       | npv                 | Cannot solve this problem |  Can you give more examples on npv

Как видно из первого результата, показаны 2 подходящих ключевых слова - Амортизация и DCF.

Есть какой-либо способ сделать это.

Заранее благодарим Вас за помощь

2 ответа

Решение

Попробуй это, у меня нормально работает.

SELECT column1, column2,
cASE when column1 like '%word1%' then "word1" 
when column1 like '%word2%' then "word2" 
when column1 like '%word3%' then "word3" 
when column1 like '%word4%' then "word4" end  as matched_word
FROM table_name WHERE MATCH (column1,column2)
AGAINST ('"word1" "word2" "word3" "word4"' IN BOOLEAN MODE);

Вы можете использовать второй оператор case для column2 соответственно. Если вы хотите показать оба столбца matched_value вместе, используйте это-

SELECT column1, column2,
ifnull((cASE when column1 like '%word1%' then "word1" 
when column1 like '%word2%' then "word2" 
when column1 like '%word3%' then "word3" 
when column1 like '%word4%' then "word4" end),
(cASE when column2 like '%word1%' then "word1" 
when column2 like '%word2%' then "word2" 
when column2 like '%word3%' then "word3" 
when column2 like '%word4%' then "word4" end))  as matched_word
FROM table_name WHERE MATCH (column1,column2)
AGAINST ('"word1" "word2" "word3" "word4"' IN BOOLEAN MODE);

С делом / если.

concat(
   if(yourcolumn like"%keyword%", 'keyword ', ''),
   if(yourcolumn like"%keyword2%", 'keyword2 ', ''),
   if(yourcolumn like"%keyword3%", 'keyword3 ', '')
) as found_keywords
Другие вопросы по тегам