Boris726 Posted March 29, 2014 Share Posted March 29, 2014 Соратники! Обнаружил следующее. Если есть товар, например, с артикулом АБВ12345, то найти его можно вбив в поиск АБВ12345 , АБВ123, АБВ1 и т.д. Но если вбить 12345 или 123 , то результатов не будет. Регулярные выражения, типа * не работают. Есть ли способ найти товар вбив 12345? Спасибо, С уважением. Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted April 23, 2014 Share Posted April 23, 2014 Нужно переопределить метод find класса Search. В sql-запросе, который выполняет поиск, нужно добавить символ % в начало строки, которую ищем. Нужно найти в файле classes/Search.php вот этот код: $intersect_array[] = 'SELECT si.id_product FROM '._DB_PREFIX_.'search_word sw LEFT JOIN '._DB_PREFIX_.'search_index si ON sw.id_word = si.id_word WHERE sw.id_lang = '.(int)$id_lang.' AND sw.id_shop = '.$context->shop->id.' AND sw.word LIKE '.($word[0] == '-' ? ' \''.pSQL(Tools::substr($word, 1, PS_SEARCH_MAX_WORD_LENGTH)).'%\'' : '\''.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\'' ); И заменить на этот: $intersect_array[] = 'SELECT si.id_product FROM '._DB_PREFIX_.'search_word sw LEFT JOIN '._DB_PREFIX_.'search_index si ON sw.id_word = si.id_word WHERE sw.id_lang = '.(int)$id_lang.' AND sw.id_shop = '.$context->shop->id.' AND sw.word LIKE '.($word[0] == '-' ? ' \'%'.pSQL(Tools::substr($word, 1, PS_SEARCH_MAX_WORD_LENGTH)).'%\'' : '\'%'.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\'' ); У меня этот кусок кода начинается с 209 строчки 2 Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted April 23, 2014 Share Posted April 23, 2014 И лучше всего для измененного файла сделать override, чтобы не было проблем с обновлением и т.д. 1 Link to comment Share on other sites More sharing options...
Boris726 Posted April 23, 2014 Author Share Posted April 23, 2014 Dzianis, огромное спасибо! Буду пробовать. Честно говоря, подумал, что никто с такой проблемой не сталкивался за ненадобностью. С уважением, Boris. Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted April 24, 2014 Share Posted April 24, 2014 Для некоторых это очень актуальная проблема. Но в реализации такого поиска есть и недостаток, т.к. увеличится нагрузка на сервер базы данных 1 Link to comment Share on other sites More sharing options...
Boris726 Posted April 24, 2014 Author Share Posted April 24, 2014 Dzianis, ещё раз спасибо! Всё работает. Теперь буду смотреть насколько увеличится нагрузка. С уважением, Boris. Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted April 25, 2014 Share Posted April 25, 2014 Отлично) Для таких sql-запросов можно использовать кэш, чтобы не перегружать базу. Увеличение нагрузки зависит от количества юзеров, которые одновременно пытаются что-то искать Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now