UMIhelp

Разработка сайта на UMI.CMS => Макросы UMI.CMS => Тема начата: Cubes от 28 Мая 2015, 15:01:04

Название: Умный фильтр в каталоге
Отправлено: Cubes от 28 Мая 2015, 15:01:04
Здравствуйте! Возникла проблема следующего характера: имеется фильтр по каталогу, одно из полей "Название", допустим один из объектов каталога содержит довольно длинную фразу в данном поле (например: "Супер тонкий телевизор"). Если вписать в фильтре в поле "Название" фразу "Телевизор тонкий", то ничего найдено не будет, так как фильтр ищет точное совпадение. Что в этом случае можно сделать? Можно ли реализовать, чтобы фильтр работал по частичному совпадению, т.е. по запросу "тонкие телевизоры" было что-то найдено? Спасибо!
Название: Re: Умный фильтр в каталоге
Отправлено: Cubes от 28 Мая 2015, 15:25:35
Забыл упомянуть, используется tpl.
Название: Re: Умный фильтр в каталоге
Отправлено: Cubes от 29 Мая 2015, 11:42:07
Отвечу сам на свой вопрос. При фильтрации формируются параметры в url: ?fields_filter["название поля"]="текст". Если в поисковой фразе есть пробелы, они заменяются на +. Например фраза: "Супер тонкий телевизор", будет в url "Супер+тонкий+телевизор". Фильтрация по текстовому полю осуществляются с помощью атрибута "Like" (т.е. ищем входит ли наша подстрока в целую строку), поэтому если искать "Супер телевизор", а в базе целая строка - "Супер тонкий телевизор", найдено ничего не будет! Поэтому нужно заменить пробел(+) на %(любое кол-во символов).
Если средствами js, то : .value.replace(new RegExp(" ",'g'),"%").

Остается проблема с порядком слов, т.е. если написать "телевизор тонкий", то поиск ничего не даст. Здесь уже надо переписывать сам метод фильтрации, как и в случае с частичным совпадением.
Название: Re: Умный фильтр в каталоге
Отправлено: admin от 29 Мая 2015, 12:20:02
на своей практике, поиск по названию всегда выносим в отдельный поиск (на основе модуля search) и при необходимости переписываем данную функцию, для добавления немного морфологии в логике поиска.

P.S. То есть, в фильтре ищем только по полям типа выпадающий список, галочка, число, а строка уже отдельным функционалом