Готовые решения для 1С-Битрикс
Карточка решения
База знаний по решению:
Умный поиск с исправлением ошибок в запросе и подсказками
Часто задаваемые вопросы:

Настраиваемые фильтры

Решение "Умный поиск" поддерживает дополнительные фильтры для компонентов search.page и search.title. Т.к. решение расширяет стандартный модуль поиска - работа и структура фильтров идентична стандартным фильтрам модуля Поиск.
При создании фильтра особое внимание обратите формату - у поиска другой формат фильтра, отличающийся от фильтров для инфоблоков! Для фильтрации по параметру его нужно предварительно заиндексировать.

Подробная инструкция по настройке и разбор технологии фильтров поиска есть в документации битрикса - читать в первоисточнике


Фильтры заложенные "из коробки":


1. Фильтр по доступности товара (На основе стандартного поля CATALOG_AVAILABLE)
Позволяет убрать из поиска недоступные товары

global $arTitleSearchFilter; $arTitleSearchFilter = array("PARAMS" => array("catalog_available"=>'Y'));


Пример создания фильтра по свойству инфоблока:


В примере ниже индексация свойства инфоблока и последующая фильтрация по значению свойства. Это типовой пример - при использовании обязательно проверяйте и адаптируйте под свой проект.

1. Добавляем событие индексации (в примере индексируется свойство с кодом MATERIAL)
AddEventHandler("search", "BeforeIndex", "addElementPropertyToSearchindex"); function addElementPropertyToSearchindex($arFields) { if($arFields["MODULE_ID"] == 'iblock' && substr($arFields["ITEM_ID"], 0, 1) != "S"){ if(CModule::IncludeModule("iblock")) { $indexProp = 'MATERIAL'; $arFields["PARAMS"]["filter_prop"] = []; $lstSelect = [ 'IBLOCK_ID', 'ID', 'NAME', 'PROPERTY_'.$indexProp ]; $dctFilter = [ 'IBLOCK_ID'=> $arFields['PARAM2'], 'ID' => $arFields['ITEM_ID'], ]; $rdb = \CIBlockElement::GetList([], $dctFilter, false, false, $lstSelect); while($dctElement = $rdb->fetch()) { $arFields["PARAMS"]["filter_prop"][] = $dctElement['PROPERTY_'.$indexProp.'_VALUE']; } } } return $arFields; }
После добавления и отладки кода индексации свойства делаем полную переиндексацию поиска.

2. Устанавливаем фильтр для компонентов поиска

Перед компонентами задаём переменную с фильтром:
global $arSearchFilter; $arSearchFilter = array("PARAMS" => array("filter_prop"=>'Тест'));
В параметре компонента FILTER_NAME указываем название переменной с фильтром:
"FILTER_NAME" => "arSearchFilter",