Самое простое решение (не самое лучшее, IMHO, но одно из самых простых) - это использование полнотекстового индекса MySQL.Вы можете начать с чтения документации MySQL по полнотекстовому индексу , это чрезвычайно полезно для создания небольшой поисковой системы.Заимствование объяснений из википедии :
При полнотекстовом поиске поисковая система проверяет все слова в каждом сохраненном документе, поскольку она пытается сопоставить поисковые слова, предоставленные пользователем.
Итак, в моем предложении вы можете иметь эту таблицу, подобную этой:
----------------------------------------
RECIPES
----------------------------------------
id | int(11) | PRIMARY KEY
title | varchar(255) |
body | mediumtext |
ingredients | tinytext | FULLTEXT
Замечания:
Добавить полнотекстовый индексдо ingredients
только поле.
Храните ингредиенты внутри поля ingredients
, разделенные пробелом, не используйте запятую.
Храните ингредиенты в двух местах, поле ingredients
выше просто для поиска.Возможно, вам лучше использовать другую таблицу для хранения списка ингредиентов для других вариантов использования.
Поскольку вы используете полнотекстовый индекс, вы можете использовать синтаксис BOOLEAN MODE
.Если вы хотите искать рецепты, которые имеют egg
и tomato
, используйте +eggs +tomato
, если вы хотите искать рецепты, которые содержат egg
, но не tomato
, используйте +egg -tomato
.См. Руководство MySQL для подробного объяснения .
Опять же, это может быть не лучшим решением, но это первое, о чем я могу подумать, и, конечно, это легко.
Несколько предостережений:
Полнотекстовый движок MySQL не распознает слова с длиной менее 4 символов по умолчанию, вы можете изменить это.
Если вы не используете логический режим, полнотекстовый поиск MySQL вернется пустым, если будет получен результат, если более 50% вашего набора данных.
Полнотекстовый поиск будет игнорироватьсястоп-слова, вот список .