Я создаю веб-сайт, который пользователи загружают изображения и пишут описание для него.
Я хочу, чтобы пользователи могли искать описание, которое они имеют в виду, для изображения, которое они хотят получить.
Сначала я решил преобразовать описание, введенное пользователем при загрузке изображения, в ключевые слова и связать ключевые слова с изображением, в этом случае, когда пользователи выполнят поиск описания, позже введенное ими описание будет преобразовано в ключевые слова и каким-то образом будут генерироваться синонимы для ключевых слов, которые будут все искать по ключевым словам в БД.
Недавно я прочитал о MySQL полнотекстового поиска. Я создал таблицу с описаниями и идентификаторами изображений и попробовал пару запросов, используя функцию полнотекстового поиска. Похоже, что в большинстве поисков результаты не возвращаются из-за ограничения длины слова и стоп-слов.
Вот мой тестовый запрос:
SELECT * FROM descriptions WHERE MATCH (description) AGAINST ('same' IN BOOLEAN MODE);
В таблице есть запись с описанием, содержащая ключевое слово «same», но результаты не возвращаются.
Мой вопрос: лучше ли использовать «LIKE% ключевые слова%» в таблице описания или использовать FTS в таблице описания или придерживаться подхода таблицы ключевых слов?
С LIKE у вас есть три подхода.
1) Если он содержит все слова в одном и том же порядке (Ключевые слова: один самолет)
SELECT * FROM descriptions WHERE description LIKE('%One airplane%');
2) Если он содержит все слова, но порядок не имеет значения
SELECT * FROM descriptions WHERE description LIKE('%One%') AND description LIKE('% airplane%');
3) Если он содержит некоторые слова
SELECT * FROM descriptions WHERE description LIKE('%One%') OR description LIKE('% airplane%');
Теперь вы можете выбрать, насколько строго вы хотите быть с поисками.
Если вы хотите перейти ко второй или третьей реализации, вы будете разбивать строку с ключевыми словами на «пробел» и добавлять аналог для каждого элемента в массиве.
Других решений пока нет …