способ сделать это было бы начать с выбора продуктов с именами, которые используют одни и те же слова, как ток продукты и заказывать их по количеству слов соответствует
Я сделал тест и использовал таблицу, используя эту структуру/содержание: http://i.imgur.com/bwnNd.png
предположив, что текущий продукт является одним с идентификатором 1 и названием «Lorem ipsum dolor sit amet "Я разделил заголовок на слова, выберите продукты, в которых есть хотя бы одно из слов в названии, закажите список по количеству совпадающих слов и получите только первые несколько (4 в примере)
После этого, чтобы убедиться, что вы получаете лучшие результаты, а не только те, которые соответствуют максимальному количеству слов, вы можете использовать алгоритм сравнения строк, например, расстояние levenshtein.Я использовал этот алгоритм, так как существует функция для этого в ядре php http://php.net/manual/en/function.levenshtein.php
В основном эта функция сообщает вам количество преобразований, которые необходимо применить к строке, чтобы добраться до другой (путем преобразования понимается: удаление характер, добавив к нему один или изменение значения одного)
Итак, получив расстояние Левенштейна между первоначальным названием и один для каждого результата вы будете знать, те, которые находятся ближе
При этом вы можете найти минимальное значение (лучшее, поскольку оно говорит вам, что минимальное количество преобразований необходимо) и отображать продукты, для которых вы нашли это dista сть
Я добавил сценарий, который делает это здесь: http://codepad.org/FKDgo7ph
Как отказ: вам необходимо позаботиться о безопасности этого скрипта, это просто пример, а также интегрировать его в систему (здесь product_id и product_name для текущего продукта являются статическими вары)
Кроме того, вы можете получить лучшие результаты, добавив некоторые улучшения, такие как:
- реализовать список стоп-слов, чтобы удалить из первоначального заголовка (чтобы быть уверенным, вы не получаете «очков» f или слова типа «и», «или» и т. д.
- отмените слова перед тем, как получить оценку, и назначьте растущую производительность для каждого совпадающего слова, таким образом, убедитесь, что слова в начале названия важнее, чем те, которые указаны в конец
Любой шанс, который вы можете сохранить в таблице «серии», и иметь любую игру в этой серии, относятся к нему через поле «series_id»? – Dave
@Dave Нет, к сожалению, и данные ежедневно меняются, поскольку он втягивается из разных источников. –