2015-01-09 3 views
0

Я создаю сайт, на котором пользователи загружают изображения и пишут для этого описание. Я хочу, чтобы пользователи могли искать описание, они имеют в виду изображение, которое они хотят получить.php mysql search description for keywords

Сначала я решил преобразовать описание, введенное пользователем при загрузке изображения в ключевые слова и связать ключевые слова с изображением, в этом случае, когда пользователи выполняют поиск описания в последующем описании, которое они вводят, будут преобразуется в ключевые слова и как-то синонимы будут сгенерированы для ключевых слов, которые все будут искать по ключевым словам в БД.

Недавно я прочитал о mysql Полнотекстовый поиск. Я создал таблицу с описаниями и идентификаторами изображений и попробовал пару запросов, используя функцию полнотекстового поиска. Кажется, он не возвращает никаких результатов в большинстве поисковых запросов из-за ограничения длины слова и стоп-слов. Вот мой тестовый запрос:

SELECT * FROM descriptions WHERE MATCH (description) AGAINST ('same' IN BOOLEAN MODE); 

Существует запись в таблице с описанием, содержащим ключевое слово «же», но никаких результатов не возвращаются.

Мой вопрос: лучше ли использовать «LIKE% keywords%» в таблице описания или использовать FTS в таблице описания или придерживаться подхода к таблице ключевых слов?

ответ

0

С ВАМИ У вас есть три подхода.

1) Если он содержит все слова в том же порядке (Ключевые слова: Один самолет)

SELECT * FROM descriptions WHERE description LIKE('%One airplane%'); 

2) Если он содержит все слова, но Ther порядок не имеет значения

SELECT * FROM descriptions WHERE description LIKE('%One%') AND description LIKE('% airplane%'); 

3) Если он содержит некоторые слова

SELECT * FROM descriptions WHERE description LIKE('%One%') OR description LIKE('% airplane%'); 

Теперь вы можете выбрать, как строги вы хотите быть с поиск ресурсов s.

Если вы хотите перейти со второй или третьей реализацией, вы будете разделять строку с ключевыми словами на «пробел» и добавлять как для каждого элемента в массиве.

+0

Благодарим вас за ответ. Ваш ответ означает, что в этом случае лучше использовать LIKE, а не подход FTS или таблицы ключевых слов, упомянутый мной в моем вопросе? – user1918451

+0

Если вы не являетесь экспертом в области MySQL, вам будет проще понять, как это работает. FTS более сложна, чем LIKE. В конце концов вы, вероятно, сможете сделать то же самое с обоими, но вы вложите гораздо больше времени, чтобы заставить его работать с FTS – bucur89

+0

спасибо, можно ли достичь ранжирования какого-то типа, предложенного FTS, используя LIKE? – user1918451