This is very common problem which is being faced by all of magento 2 stores. Even Magento support saying it is fixed but still it is not working old stores which have customized plugins.
So simple fix it, go to file location vendor/magento/module-catalog-search/Model/ResourceModel/Fulltext/Collection.php
We have to update function _renderFiltersBefore.
See below function
/** * @inheritdoc */ protected function _renderFiltersBefore() { /** * @var \Magento\Framework\App\RequestInterface $request */ if(isset($_SERVER['REQUEST_URI']) && !stristr($_SERVER['REQUEST_URI'], "catalogsearch")){ $request = ObjectManager::getInstance()->create("\Magento\Framework\App\RequestInterface"); if($request->getParam("product_list_order")){ $attribute = $request->getParam("product_list_order", "position"); $direction = $request->getParam("product_list_dir", "asc"); $this->addAttributeToSort($attribute, $direction); } else{ $this->addAttributeToSort("position", "asc"); } } if ($this->isLoaded()) { return; } if ($this->searchRequestName !== 'quick_search_container' || strlen(trim($this->queryText)) ) { $this->prepareSearchTermFilter(); $this->preparePriceAggregation(); $searchCriteria = $this->getSearchCriteriaResolver()->resolve(); try { $this->searchResult = $this->getSearch()->search($searchCriteria); $this->_totalRecords = $this->getTotalRecordsResolver($this->searchResult)->resolve(); } catch (EmptyRequestDataException $e) { $this->searchResult = $this->createEmptyResult(); } catch (NonExistingRequestNameException $e) { $this->_logger->error($e->getMessage()); throw new LocalizedException(__('An error occurred. For details, see the error log.')); } } else { $this->searchResult = $this->createEmptyResult(); } $this->getSearchResultApplier($this->searchResult)->apply(); parent::_renderFiltersBefore(); }
To override file add following code to di.xml
<virtualType name="Magento\CatalogSearch\Model\ResourceModel\Fulltext\CollectionFactory" type="Magento\Catalog\Model\ResourceModel\Product\CollectionFactory"> <arguments> <argument name="instanceName" xsi:type="string">Techgroup\Addon\Model\CatalogSearch\ResourceModel\Fulltext\Collection</argument> </arguments> </virtualType> <virtualType name="elasticsearchCategoryCollection" type="Techgroup\Addon\Model\CatalogSearch\ResourceModel\Fulltext\Collection"/> <virtualType name="elasticsearchFulltextSearchCollection" type="Techgroup\Addon\Model\CatalogSearch\ResourceModel\Fulltext\Collection"/> <preference for="Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection" type="Techgroup\Addon\Model\CatalogSearch\ResourceModel\Fulltext\Collection"/>
Create file with following code Techgroup\Addon\Model\CatalogSearch\ResourceModel\Fulltext\Collection.php
<?php namespace Techgroup\Addon\Model\CatalogSearch\ResourceModel\Fulltext; use Magento\Framework\App\ObjectManager; class Collection extends \Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection { protected function _renderFiltersBefore() { /** * @var \Magento\Framework\App\RequestInterface $request */ if(isset($_SERVER['REQUEST_URI']) && !stristr($_SERVER['REQUEST_URI'], "catalogsearch")){ $request = ObjectManager::getInstance()->create("\Magento\Framework\App\RequestInterface"); if($request->getParam("product_list_order")){ $attribute = $request->getParam("product_list_order", "position"); $direction = $request->getParam("product_list_dir", "asc"); $this->addAttributeToSort($attribute, $direction); } else{ $this->addAttributeToSort("position", "asc"); } } parent::_renderFiltersBefore(); } }