Jump to content

Recommended Posts

Доброго

 

Нужно чтобы поиск работал по названиям товара и не отсекал спецсимволы (слеши и ковычки) и искал если даже в названии товара они присутствуют. Да это не безопасно, но не моя воля.

 

Сейчас при вводе в поиск он заканчивает искать при вводе спецсимвола. Как вырезать?

 

Файл в index.tpl шаблона - автозаполнитель поиска

 

function(suggestion, currentValue){
					var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
					var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
	  				return (suggestion.data.image?"<img align=absmiddle src='"+suggestion.data.image+"'> ":'') + suggestion.value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
				}	

Тут обрезает, удаление из него например слеша \ не дает результата.

 

Далее, есть в файле js/jquery.autocomplete-min.js 

 

this.selection=null;this.initialize();this.setOptions(}var k=function(){return{escapeRegExChars:function(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},createNode:function(a){var b=document.createElement("div");b.className=a;b.style.position="absolute";b.style.display="none";return b}}}();

Удаление тут тоже не помогает.

 

Куда смотреть ? api\Request.php ajax\search_products.php

 

 

Спасибо за ответ.

 

 

 


 


 

Link to post
Share on other sites
  • 1 year later...

Добрый день! Подскажите, как сделать, чтобы в поиске не учитывались пробел(ы) и тире?

Например, есть товар, в котором сдержится название модели AB 30 с пробелом. Если в поиске забивать AB30 без пробела, то он не показывает этот товар сразу. То есть чтобы найти нужные товары нужно задать поиск именно с пробелом.

И обратная ситуация, когда в названии товара может быть указано AB30 без пробела, а пользователь скопировал с другого сайта с пробелом и пытается найти этот товар. Получается он вставил в строку поиска или набрал руками AB 30 и не находит товар, хотя он есть.

Аналогично с тире.

В api\Request.php у меня выглядит так:

return strval(preg_replace('/[^\p{L}\p{Nd}\d\@\s_\-\.\%\s]/ui', '', $val));

 

Edited by Dmitry86
Link to post
Share on other sites
1 час назад, Dmitry86 сказал:

Подскажите, как сделать, чтобы в поиске не учитывались пробел(ы) и тире?

Зависит от того, как понимать "не учитывались".

Простейший вариант - при обработке поисковой фразы удаляйте все пробелы и тире. Но это вряд ли даст тот результат, который хотите.

Простыми средствами устранить недостатки, описанные в примерах, практически невозможно. Если пользователь ввел abcdefgh, то понять, что он имел в виду  и что искать - 'abc defgh' или 'ab cdefgh'. А если длинное слитное слово разбивать на несколько частей, то вариантов  будут тысячи...

Link to post
Share on other sites
10 минут назад, phukortsin сказал:

Зависит от того, как понимать "не учитывались".

Простейший вариант - при обработке поисковой фразы удаляйте все пробелы и тире. Но это вряд ли даст тот результат, который хотите.

Простыми средствами устранить недостатки, описанные в примерах, практически невозможно. Если пользователь ввел abcdefgh, то понять, что он имел в виду  и что искать - 'abc defgh' или 'ab cdefgh'. А если длинное слитное слово разбивать на несколько частей, то вариантов  будут тысячи...

Благодарю за ответ. Тут чисто технически, скорее всего, проще убирать все пробелы из названия товара при выборке и из строки поиска, и потом сравнивать их. Разве в этом случае я не получу желаемый результат? Независимо от того, что введет пользователь в строку поиска, с пробелом или без, нужно ему показать тот товар, у которого в названии есть вхождение искомого запроса с пробелами или без оных.

Не важно, что имел ввиду пользователь, важно, чтобы набор этих символов был найден в названии товара, ведь 'abc defgh' и 'ab cdefgh', ведь, с точки зрения машины, будет  = abcdefgh, если в названии товара убрать все пробелы, соотвественно товар будет показан пользователю как найденный.

Делать гугл тут не надо, конечно. Поиск настолько примитивный, что он даже не найдет товар 'AB 30', если набрать '30 AB', но вот с пробелами решить хотелось бы. Иногда  наблюдаю в Вебвизоре, как люди не находят желаемое и уходят с сайта только из-за того, что они не поставили пробел или наоборот поставили пробел в запросе в строке поиска.

 

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

Link to post
Share on other sites
В 25.11.2021 в 17:21, Dmitry86 сказал:

Благодарю за ответ. Тут чисто технически, скорее всего, проще убирать все пробелы из названия товара при выборке и из строки поиска, и потом сравнивать их. Разве в этом случае я не получу желаемый результат? Независимо от того, что введет пользователь в строку поиска, с пробелом или без, нужно ему показать тот товар, у которого в названии есть вхождение искомого запроса с пробелами или без оных.

Не важно, что имел ввиду пользователь, важно, чтобы набор этих символов был найден в названии товара, ведь 'abc defgh' и 'ab cdefgh', ведь, с точки зрения машины, будет  = abcdefgh, если в названии товара убрать все пробелы, соотвественно товар будет показан пользователю как найденный.

Технически такое не сильно сложно. Создать доп поле названия, в него автоматически записать основное название без пробелов. И в алгоритм поиска внести изменения, чтоб по новому полю искалось соответствие для поисковой строки, из которой удалены пробелы. Но, скорее всего, получите другие сюрпризы - поиск будет выдавать много лишних товаров...

В 25.11.2021 в 17:21, Dmitry86 сказал:

Поиск настолько примитивный, что он даже не найдет товар 'AB 30', если набрать '30 AB'

Стандартный основной поиск в такой ситуации находит нужное. Возможно, Вы имеете в виду "живой" поиск - алгоритмы поисков совсем разные... 

В 25.11.2021 в 17:21, Dmitry86 сказал:

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

Конечно, можно придумать много разных своих вариантов. Например, преобразовывать строку 'AB30' к виду 'AB 30' - по границе буквенной части и цифровой части. Надо пробовать конкретно на Вашем сайте с Вашим специфичными товарами, сразу в общем виде вряд ли решение кто даст...

Link to post
Share on other sites
В 27.11.2021 в 09:23, phukortsin сказал:

Вы имеете в виду "живой" поиск

Видимо его я имею ввиду, потому что интересует именно та часть, когда при вводе в строку поиска выпадают предложения с найденным товарами. Если я правильно понимаю, то эта часть относится к JS. В живом поиске можно не учитывать вводимые пробелы? То есть, независимо от того, как указано в названии товара, допустим 'AB30' или 'AB 30' или 'A B-30', то его можно найти даже указав с пробелами, без тире, или с тире в другом месте, например: 'AB 30' или 'A B30', или хоть 'A B-3 0'.

Link to post
Share on other sites

Весьма общие и сложные вопросы ставите. Попробуйте сначала на человеческом языке объяснить то, что хотите, с примерами, учитывающими все тонкости. И надо хоть немного понимать, как работает текстовый поиск, и учитывать это в постановке задачи.

Link to post
Share on other sites
3 часа назад, phukortsin сказал:

Весьма общие и сложные вопросы ставите. Попробуйте сначала на человеческом языке объяснить то, что хотите, с примерами, учитывающими все тонкости. И надо хоть немного понимать, как работает текстовый поиск, и учитывать это в постановке задачи.

Извините, не знаю, как ещё объяснить... ? Вроде, с примерами написал, что хотел бы увидеть.. Давайте по-другому попробую: живой поиск должен искать только буквы и цифры при наборе текста в строке поиска. Вводимые пользователем символы "пробел" и "тире" он должен игнорировать.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...