Как найти похожие продукты

Я создаю сайт сравнения цен в php и mysql. поэтому мне нужно найти похожие продукты и сопоставить их, чтобы создать таблицу сравнения цен. В моей базе данных доступно более 10 000 продуктов, поэтому для поиска похожих продуктов я создал полнотекстовый индекс mysql в столбцах названия и описания продукта и сравнил продукт с другими продуктами, но не могу получить желаемый результат, например, если я ищу

Поиск «Samsung Galaxy A7 (2017) 32gb», получить результаты:

  1. Samsung Galaxy A7 32 ГБ (2017)
  2. Смартфон Samsung Galaxy A7
  3. Samsung Galaxy J7 (2017) черный 32гб
  4. Samsung Galaxy A7 64 ГБ (NEW)
  5. Samsung Galaxy J7 Prime 16 ГБ
  6. Samsung Galaxy J7 (16 ГБ, черный)
  7. Samsung Galaxy J2 Pro (16 ГБ)
  8. Samsung Galaxy A5 (32 ГБ)
  9. Samsung Galaxy S7 Edge 32 ГБ Синий Коралл

Примечание: в наборе результатов только первые два и четвертый продукт похожи, остальные не

Теперь у меня есть вопрос:

Как найти важное ключевое слово в поисковом запросе, чтобы ключевое слово требовалось хотя бы в другом продукте, чтобы знать сходство? Например, в приведенном выше поисковом запросе «Samsung Galaxy A7» является важным ключевым словом, которое в результате должно быть указано в другом продукте. Мы, Человек, можем знать, что «Samsung Galaxy A7» является важным ключевым словом из «Samsung Galaxy A7 (2017) 32gb» для сравнения с другими продуктами, но как узнать компьютерную программу?

Существует любой алгоритм для сравнения подобного продукта по важному ключевому слову, как алгоритм просеивания при сравнении изображений.

Если у вас есть какой-либо хороший способ найти похожие продукты, пожалуйста, предложите мне

2

Решение

Посмотрите вокруг Elasticsearch которая является поисковой системой.

Это может сделать поиск по ключевым словам и вернуть результат по оценке.

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

Тем не менее, он может определять общие термины в ваших документах (например, «the», «a» … или «32gb», если есть много моделей, использующих этот термин.) И корректировать оценку этих общих терминов, чтобы снизить оценку. (Запрос общих терминов ES)

Elasticsearch является мощным (так как его сложность), он может иметь много лучших решений для этой темы.

Редактировать: хороший статья о «запросе общих терминов» и «списке стоп-слов». Стоп-слова могут навсегда исключить спецификации, если вы этого хотите. Иногда «запрос общих терминов» не работает, если данные записи недостаточно широки. (например: Samsung Galaxy чаще, чем 32 ГБ)

1

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

Звучит как простой ЛАЙК:

SELECT name FROM products WHERE name LIKE 'Samsung Galaxy A7%';

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

WHERE name LIKE '%Samsung Galaxy A7%'
0

Я думаю, что я бы разделить их на пробелы, удалить пробелы и обернуть все слова вокруг LIKE %str% AND — что-то вроде этого:

$search='Samsung Galaxy A7 (2017) 32gb';
$split=preg_split('/\s+/u',$search);
$query='SELECT * FROM tbl WHERE ';
foreach($split as $str){
$query.='`name` LIKE \'%'.$db->real_escape_string($str).'%\' AND ';
}
$query=substr($query,0,-strlen(' AND '));
var_dump($query);
  • который выводит что-то вроде SELECT * FROM tbl WHERE `name` LIKE '%Samsung%' AND `name` LIKE '%Galaxy%' AND `name` LIKE '%A7%' AND `name` LIKE '%(2017)%' AND `name` LIKE '%32gb%' (тестовый код: https://3v4l.org/30llU )

но держу пари, что где-то есть php-библиотека, где эти проблемы уже решены … возможно

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