Я создаю онлайновую систему типов часто задаваемых вопросов, используя php и mySQL. Следующий SQL - это то, что используется для поиска релевантных вопросов на основе того, что пользователь ввел как $term
.
Когда пользователь ищет что-то и нажимает на соответствующий вопрос, чтобы отобразить ответ, он получает возможность оценить заданный вопрос на основе того, что он искал.
Первая часть SQL получает соответствующие идентификаторы вопросов из таблицы фактических вопросов. Вторая часть просматривает таблицу рейтингов и пытается сопоставить то, что ранее искали люди, чтобы найти соответствующие идентификаторы вопросов.
Объединение этих результатов затем используется для получения фактических названий вопросов, хранящихся в базе данных.
(SELECT id_question,
MATCH(question, tags) AGAINST ('%$term%') as rank
FROM question
WHERE MATCH(question, tags) AGAINST ('%$term%')
AND category = '$category')
UNION
(SELECT id_question,
MATCH(customer_search_query) AGAINST ('%$term%') as rank
FROM rating
WHERE MATCH(customer_search_query) AGAINST ('%$term%')
AND (customer_rating = 1))
ORDER BY rank DESC LIMIT 5;");
Проблема, с которой я столкнулся, заключается в том, что система на самом деле не учится правильно. Например, если я введу «три пользователя», система найдет совпадение в таблице вопросов.
Если я введу «3 пользователя», система найдет совпадение в таблице вопросов (на основе ключевого слова «пользователи»). Если я нажму «да, это ответило на мой вопрос», оно сохранит «3 пользователей» в таблице оценок, связав его с вопросом «три пользователя».
Проблема в том, что «3» ассоциируется только с «тремя пользователями». Есть ли способ связать число 3 в этом случае с каждым экземпляром слова «три».