mysql — Поиск продукта с переполнением стека

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

Поскольку функция поиска является одной из наиболее важных частей интернет-магазина, я ищу очень эффективное решение. Кто-нибудь знает решение, которое легко реализовать? Это не должно быть бесплатно.

ОБНОВИТЬ:

То, что я пробовал до сих пор, это сравнить термин с названием продукта. Сначала я ищу, может ли термин быть найден 1on1. После этого я беру отдельные слова в термине и проверяю, можно ли их найти в названиях продуктов. Это работает, но не достаточно точно.

0

Решение

Вы говорите, что хотите простое решение, но заметили проблемы.

Попробуйте что-то вроде:

http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html

Я бы сказал, что это один уровень сложности по сравнению с использованием LIKE, но результаты намного лучше.

Если вам нужно больше, чем это, я бы сказал, что вам нужно переосмыслить просто поиск немых ярлыков, и вам нужно начать рассматривать вопрос о том, как вы можете разрешить своим пользователям фильтровать ваши данные.

например «Canon 5D MK III» — это объектив или камера?

Эти поиски обходятся дорого с точки зрения обработки. Зачем позволять кому-то искать в вашей БД слово «Canon», которое возвращает сотни результатов, не спрашивая, ищут ли они камеру или объектив?

Возможность разрешить такую ​​фильтрацию предполагает, что в вашей базе данных есть столбцы, позволяющие вам отделить все камеры от объективов и вложений.

Итак, поиск — это хорошо, но лучше фильтровать метаданные, описывающие каждую строку, если вы этого еще не сделали, вы можете начать этот процесс. Я хотел бы предположить, что выгоды, которые вы получите, будут значительно превосходить возможности поиска на вашем веб-сайте.

1

Другие решения

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

$res = mysqli_query($connection ,"SELECT * FROM `products` WHERE productname like '%xxx%'");

while($row = mysqli_fetch_array($res))
{
echo $row['productname'] . '<br>';
}
0

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

http://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html

Короче говоря, LIKE — это что-то вроде оператора сравнения, просто сопоставление по шаблону. В вашем примере, скажем, имя продукта LIKE «% searchterm%».

Я надеюсь это тебе поможет. С уважением

-1
По вопросам рекламы [email protected]