Jump to content

Поиск и результат поиска


Recommended Posts

Соратники!

Обнаружил следующее. Если есть товар, например, с артикулом АБВ12345, то найти его можно вбив в поиск АБВ12345 , АБВ123, АБВ1 и т.д. Но если вбить 12345 или 123 , то результатов не будет. Регулярные выражения, типа * не работают.

Есть ли способ найти товар вбив 12345?

Спасибо,

С уважением.

 

Link to comment
Share on other sites

  • 4 weeks later...

Нужно переопределить метод 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 строчки

  • Like 2
Link to comment
Share on other sites

Dzianis, огромное спасибо! Буду пробовать.

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

 

С уважением,

Boris.

Link to comment
Share on other sites

Отлично) Для таких sql-запросов можно использовать кэш, чтобы не перегружать базу.

Увеличение нагрузки зависит от количества юзеров, которые одновременно пытаются что-то искать

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...