Сообщение #8 zyxer » 21.09.2020, 07:05
На сколько я понимаю, вы хотите чтобы поиск был только по полному слову, не по части. Как вариант не самого элегантного решения (но в теории рабочего для вашего случая) создать у товара отдельное поле search_keywords, в котором через разделитель будут написаны слова для поиска. Также важно чтобы текст начинался и заканчивался на этот разделитель. Например: "|слово1|10|слово2|", и сделать поиск только по этому полю, без поиска по имени и прочим полям.
Суть поиска заключается в том, чтобы найти по запросу "10" записи LIKE "%|10|%", таким образом вы укажите границы слова. Можно также попробовать искать по полю имя, но тогда нужно делать сложнее, где для всех слов кроме первого и последнего подойдет поиск LIKE "% 10 %", для первого подойдет LIKE "10 %", для последнего LIKE "% 10", но в таком случае будет слишком много лайков, а они достаточно медленные.
Также для первого варианта нужно делать отдельный скрипт, который будет наполнять поле search_keywords после обновления товара.
На сколько я понимаю, вы хотите чтобы поиск был только по полному слову, не по части. Как вариант не самого элегантного решения (но в теории рабочего для вашего случая) создать у товара отдельное поле search_keywords, в котором через разделитель будут написаны слова для поиска. Также важно чтобы текст начинался и заканчивался на этот разделитель. Например: "|слово1|10|слово2|", и сделать поиск только по этому полю, без поиска по имени и прочим полям.
Суть поиска заключается в том, чтобы найти по запросу "10" записи LIKE "%|10|%", таким образом вы укажите границы слова. Можно также попробовать искать по полю имя, но тогда нужно делать сложнее, где для всех слов кроме первого и последнего подойдет поиск LIKE "% 10 %", для первого подойдет LIKE "10 %", для последнего LIKE "% 10", но в таком случае будет слишком много лайков, а они достаточно медленные.
Также для первого варианта нужно делать отдельный скрипт, который будет наполнять поле search_keywords после обновления товара.
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS