Xrist1An
@Xrist1An
задаю глупые вопросы

MySQL поиск. Какие из моих вариантов наиболее рациональны?

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

Искать нужно по трем полям; title(тут может быть несколько слов), color(только одно слово), category(только одно слово).

У меня есть следующие идеи:

- создать еще одно поле, в которое скинуть всю информацию из 3ех полей и искать только по этому, 4-му полю, с помощью FULLTEXT.

- То же самое, но искать с помощю LIKE

- Искать одновременно по 3-ем полям LIKE'ом или FULLTEXT'ом.

Думается мне, что первый вариант самый рациональный, но с FULLTEXT'ом плохо знаком. Нужно ли будет приводить данные в этом поле к какому-то стандарту? Можно просто весь текст в кучу с запятыми и прочими знаками?

Спасибо.

P.s. Прошу не предлагать сфинкс и иже с ним.
  • Вопрос задан
  • 343 просмотра
Пригласить эксперта
Ответы на вопрос 5
Используйте полнотекстовый поиск MySQL
Для InnoDB таблиц полнотекстовый индекс доступен с версии MySQL 5.6
Ответ написан
thewind
@thewind
php программист, front / backend developer
Вам нужен sphinx
Ответ написан
Комментировать
@andreyvlru
менеджер-программист
Сфинкс более навороченный, но сложнее в настройке и обслуживании
фактически надстройка специально для полнотекстового поиска

Если MySQL 5.6 то наверное лучше попробовать встроенный полнотекст
Ответ написан
Комментировать
Можно свести данные в 1 поле в отдельную таблицу, где поля id и search (CONCAT(title, color, category)) и искать уже по этой таблице
Ответ написан
Комментировать
suguby
@suguby
программист, python, django, mysql, git, hg, linux
По LIKE индексации нет, FULLTEXT позволяет индексировать, но один индекс на таблицу. Так что - ваш первый вариант
создать еще одно поле, в которое скинуть всю информацию из 3ех полей 
и искать только по этому, 4-му полю, с помощью FULLTEXT

но возможности FULLTEXTа очень ограничены, пользователю нужно уметь делать запросы типа +корова и прочее - для него это сложно. Так что все-таки sphinx.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы