Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Доброго

 

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

 

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

 

Файл в 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

 

 

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

 

 

 


 


 

Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...

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

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

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

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

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

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

 

Изменено пользователем Dmitry86
Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Dmitry86 сказал:

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
10 минут назад, phukortsin сказал:

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

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

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

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

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

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

 

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

Ссылка на сообщение
Поделиться на другие сайты
В 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' - по границе буквенной части и цифровой части. Надо пробовать конкретно на Вашем сайте с Вашим специфичными товарами, сразу в общем виде вряд ли решение кто даст...

Ссылка на сообщение
Поделиться на другие сайты
В 27.11.2021 в 09:23, phukortsin сказал:

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, phukortsin сказал:

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

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

Ссылка на сообщение
Поделиться на другие сайты

 

21 час назад, Dmitry86 сказал:

живой поиск должен искать только буквы и цифры

Бессмыслица. Поиск ищет не буквы, а ТОВАРЫ по соответствию текстов в поисковой фразе. Например, ввели поисковую строку 'мар', ей соответствуют товары, у которых в текстах (названия, меты, что-то другое) встречается 'марля' или 'мармелад' или 'амарант'.

Уже сказано - пробуйте объяснить свои хотелки на примере, ТОЧНО. Скажем, ввели поисковая фразу 'дом кота'. Что в этом случае хотите искать в текстах продуктов? Из того сумбура, что пишете, можно предположить:

В1. Искать текст 'домкота' (удален пробел). В результате ничего не найдется!

В2. Искать товары, у которых встречаются ВСЕ из текстов 'д', 'о', 'м', 'к', 'о', 'т', 'а', (каждый символ отдельно). Найдется много чего, но со смыслом поиска связи никакой.

В3. Искать товары, у которых встречаются хотя бы один из текстов 'д', 'о', 'м', 'к', 'о', 'т', 'а'. Результат - будет найдены почти все товары. Толку никакого...

 

 

 

 

Ссылка на сообщение
Поделиться на другие сайты
  • 5 месяцев спустя...
В 02.12.2021 в 09:47, phukortsin сказал:

 

Бессмыслица. Поиск ищет не буквы, а ТОВАРЫ по соответствию текстов в поисковой фразе. Например, ввели поисковую строку 'мар', ей соответствуют товары, у которых в текстах (названия, меты, что-то другое) встречается 'марля' или 'мармелад' или 'амарант'.

Уже сказано - пробуйте объяснить свои хотелки на примере, ТОЧНО. Скажем, ввели поисковая фразу 'дом кота'. Что в этом случае хотите искать в текстах продуктов? Из того сумбура, что пишете, можно предположить:

В1. Искать текст 'домкота' (удален пробел). В результате ничего не найдется!

В2. Искать товары, у которых встречаются ВСЕ из текстов 'д', 'о', 'м', 'к', 'о', 'т', 'а', (каждый символ отдельно). Найдется много чего, но со смыслом поиска связи никакой.

В3. Искать товары, у которых встречаются хотя бы один из текстов 'д', 'о', 'м', 'к', 'о', 'т', 'а'. Результат - будет найдены почти все товары. Толку никакого...

 

 

 

 

Если говорить о "живом" поиске. По мере набора текста, когда появляются выпадающие предложения. Беру ваш пример: товар называется 'дом кота'. Пользователь набирает: 'домкота' или 'дом-кота', ему предлагается перейти в товар 'дом кота'. Соответсвенно вариации могут быть разные, например, товар называется 'дом-кота'. Пользователь может набирать 'дом кота' или 'домкота', то ему нужно показать 'дом кота'.

Изменено пользователем Dmitry86
Ссылка на сообщение
Поделиться на другие сайты

Видимо, так:

Фразы 
'дом кота ул зеленая 78'
'дом кота ул зеленая,78'
'дом кота ул. зеленая, 78'
'дом-кота ул. зеленая, 78'
'домкота:ул:зеленая:78'
Должны давать одинаковый результат.

Для этого 
1. Сначала из фразы удалять все не алфавитно-цифровые символы, получится 'домкотаулзеленая78'
2. Потом фразу разбивать на слова разными способами, например
'дом котаулзеленая78'
'домкотаулзеленая 78'
'домкотаулзел еная78'
'домко таулзеленая78'
'до мк отау лзеле на я78'
3. По каждому способу проводить поиск и результаты объединять.

Практически довольно сложно, и заранее неизвестно, какой выйдет результат. 
Например, если не ограничивать способы в п.2, то число вариантов разбиения с ростом длины быстро вырастет до тысяч и даже миллионов-миллиардов, и никаких ресурсов не хватит. 
Если требовать длину слов в разбиении, скажем, не менее 3, то в указанном примере никогда не будет искаться '78', а будет искаться 'я78', 'ая78', 'ная78' и т.д. В результате ничего не найдется.
То есть сложностей масса уже на этапе планирования...

Ссылка на сообщение
Поделиться на другие сайты
5 часов назад, Kosjak76 сказал:

Если заменить символы сразу пробелами?

Проблем будет в разы меньше

Проблем, конечно, меньше.  Но это не будет работать так, как требуется. В заявке, в частности, сказано

15 часов назад, Dmitry86 сказал:

Пользователь набирает: 'домкота' или 'дом-кота', ему предлагается перейти в товар 'дом кота'.

то есть слова при поиске могут быть слиты вместе и нужно угадать границы слов...

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...