Я ищу функцию поиска товаров для интернет-магазина. В магазине 3500 наименований. Элементы могут быть найдены в базе данных MySQL или в файле. Я хочу получить продукты, которые лучше всего соответствуют поисковому запросу. Поисковый термин должен сравниваться с названием продукта.
Поскольку функция поиска является одной из наиболее важных частей интернет-магазина, я ищу очень эффективное решение. Кто-нибудь знает решение, которое легко реализовать? Это не должно быть бесплатно.
ОБНОВИТЬ:
То, что я пробовал до сих пор, это сравнить термин с названием продукта. Сначала я ищу, может ли термин быть найден 1on1. После этого я беру отдельные слова в термине и проверяю, можно ли их найти в названиях продуктов. Это работает, но не достаточно точно.
Вы говорите, что хотите простое решение, но заметили проблемы.
Попробуйте что-то вроде:
http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html
Я бы сказал, что это один уровень сложности по сравнению с использованием LIKE, но результаты намного лучше.
Если вам нужно больше, чем это, я бы сказал, что вам нужно переосмыслить просто поиск немых ярлыков, и вам нужно начать рассматривать вопрос о том, как вы можете разрешить своим пользователям фильтровать ваши данные.
например «Canon 5D MK III» — это объектив или камера?
Эти поиски обходятся дорого с точки зрения обработки. Зачем позволять кому-то искать в вашей БД слово «Canon», которое возвращает сотни результатов, не спрашивая, ищут ли они камеру или объектив?
Возможность разрешить такую фильтрацию предполагает, что в вашей базе данных есть столбцы, позволяющие вам отделить все камеры от объективов и вложений.
Итак, поиск — это хорошо, но лучше фильтровать метаданные, описывающие каждую строку, если вы этого еще не сделали, вы можете начать этот процесс. Я хотел бы предположить, что выгоды, которые вы получите, будут значительно превосходить возможности поиска на вашем веб-сайте.
Вот так вы запускаете запрос и печатаете информацию о продукте.
Конечно, вам нужно будет сделать его лучше, так как есть больше столбцов.
$res = mysqli_query($connection ,"SELECT * FROM `products` WHERE productname like '%xxx%'");
while($row = mysqli_fetch_array($res))
{
echo $row['productname'] . '<br>';
}
Если вы, по крайней мере, знакомы с php и знаете, как запрашивать базу данных, я предлагаю вам использовать эту документацию, в конце концов вы будете знать, что с ней делать.
http://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html
Короче говоря, LIKE — это что-то вроде оператора сравнения, просто сопоставление по шаблону. В вашем примере, скажем, имя продукта LIKE «% searchterm%».
Я надеюсь это тебе поможет. С уважением