You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When ElasticSuite is enabled and there are many filterable attributes configured, search page loads very slowly. The same issue also affects non-cached category pages with layered navigation enabled.
Preconditions
Magento Version : CE 2.4.6-p5
ElasticSuite Version : 2.11.6
Environment : Production
Steps to reproduce
Configure ~30 attributes to be filterable on search results page
Try using Magento search
Go to search results page
Expected result
Search results page loads fast enough
Actual result
It takes around 15-20 seconds to load (server response time)
Additional Info
After enabling Magento profiler and debugging the issue, it turned out that this is related to changes in the following file: \Smile\ElasticsuiteCatalog\Model\ResourceModel\Product\Fulltext\Collection
The problem is that the following line is added in multiple places: $this->_isFiltersRendered = false;
Filters should be collected only once per page load. But since _isFiltersRendered gets reseted for every filter, module makes a request to Elasticsearch for every single filterable attribute. Such a request takes around 0.5 seconds. So if there are 30 filterable attributes, it will take 30*0.5=15 seconds to render the filters section only.
Temporary Fix
A quick fix is to add a flag Collection::filtersRendered as a class member: private $filtersRendered = false;
And then set it to true once the filters are rendered:
protected function _renderFilters()
{
if ($this->filtersRendered) {
return $this;
}
$this->_filters = [];
parent::_renderFilters();
$this->filtersRendered = true;
return $this;
}
The text was updated successfully, but these errors were encountered:
The multiple locations (and legacy, mind you) where $this->_isFiltersRendered = false; is applied make total sense, it's basically when the collection / request "parameters" are changed: pageSize, curPage, search query, search filters.
On the other hand, while I see where you're coming from with a possible "multiple getFacetedData = multiple _renderFilters = multiple _renderFiltersBefore = multiple search query execution".
But that something that we have never noticed.
We'll have a look into it.
When ElasticSuite is enabled and there are many filterable attributes configured, search page loads very slowly. The same issue also affects non-cached category pages with layered navigation enabled.
Preconditions
Magento Version : CE 2.4.6-p5
ElasticSuite Version : 2.11.6
Environment : Production
Steps to reproduce
Expected result
Actual result
Additional Info
After enabling Magento profiler and debugging the issue, it turned out that this is related to changes in the following file:
\Smile\ElasticsuiteCatalog\Model\ResourceModel\Product\Fulltext\Collection
The problem is that the following line is added in multiple places:
$this->_isFiltersRendered = false;
Filters should be collected only once per page load. But since
_isFiltersRendered
gets reseted for every filter, module makes a request to Elasticsearch for every single filterable attribute. Such a request takes around 0.5 seconds. So if there are 30 filterable attributes, it will take 30*0.5=15 seconds to render the filters section only.Temporary Fix
A quick fix is to add a flag Collection::filtersRendered as a class member:
private $filtersRendered = false;
And then set it to true once the filters are rendered:
The text was updated successfully, but these errors were encountered: