Поиск + умный фильтр

Рейтинг: 13.4881  
На голосовании
Предложил Кротов Андрей 09.11.2017 12:55:06

Поиск + умный фильтр

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

На данный момент стандартных возможностей нет, так как система принципиально не может связать несколько таблиц (поиск, список товаров и список свойств товаров, плюс возможно разделы каталога) в одном запросе/методе.

Но есть чудовищное решение:
Например, для фильтрации по каким либо параметрам умному фильтру необходимо наличие идентификаторов всех товаров, которые возвращает компонент search.page. Но если результатов поиска много (при большом количестве товаров, удовлетворяющих поисковому запросу), то компонент (точнее стандартный CSearch::Search) будет сильно тормозить.
Метод CSearch::Search при порядка 60к результатов может отрабатывать от 20 сек в зависимости от индексируемых параметров, используемого аппарата.

Так же и наоборот, подмешать результаты фильтрации в поиск не получится из за того что api этого не позволяет.