Всем привет! Проблема с поиском. Мускуль грузит проц на 100 процентов. При этом еще и поиск осуществляется очень долго (больше минуты по 50 000 нодам, каждая нода по 100 слов). Все поля, используемые в поиске проиндексированы.
В качестве фильтра используется две группы критериев. В первой группе критерии объединяются через AND. Во второй группе находится один групповой критерий с двумя возможными значениями, которые объединены через OR.
И вот, например, поиск в БД по шарообразным фруктам/овощам (тип):
Группа 1 (AND)
Диаметр
Цвет
Вес
AND
Группа 2 (OR)
Тип
Так вот если в поисковом фильтре не использовать критерий из второй группы, то страница отрисовывается за секунду. А если использовать, то по минуте висит.
С чего начать для решения проблемы? Сам подумываю просмотреть какой запрос генерируется этим фильтром.
Комментарии
Начните с описания проблемы. Чем ищете? Фасетами или раскрытыми фильтрами? Апач солр стоит?
Раскрытыми фильтрами.
Апач солр не стоит, оперативы не хватает. На будущее в планах
Можно и без солра просто Search API + Facet API уже сами по себе дают огромный прирост производительности по сравнению с раскрытыми фильтрами
hook_query_alter()
Решил изменением типа данных для поля "Тип". Фактически там int, а поле было создано как text. Перестройка индекса с новыми настройками дала более чем десятикратный прирост скорости. Загрузка ЦП исчезла, время поиска не отличается при различных комбинациях фильтров.