/** * Intercept query. */ public function addSearchFilter($query) { /** @var Algolia_Algoliasearch_Helper_Config $config */ $config = Mage::helper('algoliasearch/config'); $storeId = Mage::app()->getStore()->getId(); if (!$config->getApplicationID() || !$config->getAPIKey() || $config->isEnabledFrontEnd($storeId) === false) { return parent::addSearchFilter($query); } $data = array(); if ($config->isInstantEnabled($storeId) === false || $config->makeSeoRequest($storeId)) { $algolia_query = $query !== '__empty__' ? $query : ''; try { /** @var Algolia_Algoliasearch_Helper_Data $helper */ $helper = Mage::helper('algoliasearch'); $data = $helper->getSearchResult($algolia_query, $storeId); } catch (\Exception $e) { /** @var Algolia_Algoliasearch_Helper_Logger $logger */ $logger = Mage::helper('algoliasearch/logger'); $logger->log($e->getMessage(), true); $logger->log($e->getTraceAsString(), true); return parent::addSearchFilter($query); } } $sortedIds = array_reverse(array_keys($data)); $this->getSelect()->columns(array('relevance' => new Zend_Db_Expr("FIND_IN_SET(e.entity_id, '" . implode(',', $sortedIds) . "')"))); $this->getSelect()->where('e.entity_id IN (?)', $sortedIds); return $this; }
/** * Intercept query */ public function addSearchFilter($query) { $config = Mage::helper('algoliasearch/config'); $storeId = Mage::app()->getStore()->getId(); if (!$config->getApplicationID() || !$config->getAPIKey() || $config->isEnabledFrontEnd($storeId) === false) { return parent::addSearchFilter($query); } $data = array(); if ($config->isInstantEnabled($storeId) === false || $config->makeSeoRequest($storeId)) { $algolia_query = $query !== '__empty__' ? $query : ''; $data = Mage::helper('algoliasearch')->getSearchResult($algolia_query, $storeId); } $sortedIds = array_reverse(array_keys($data)); $this->getSelect()->columns(array('relevance' => new Zend_Db_Expr("FIND_IN_SET(e.entity_id, '" . implode(',', $sortedIds) . "')"))); $this->getSelect()->where('e.entity_id IN (?)', $sortedIds); return $this; }
/** * Add search query filter without preparing result since result table causes lots of lock contention. * * @param string $query * @throws Exception * @return Mage_CatalogSearch_Model_Resource_Fulltext_Collection */ public function addSearchFilter($query) { if (!Mage::helper('algoliasearch')->isEnabled() || Mage::helper('algoliasearch')->useResultCache()) { return parent::addSearchFilter($query); } // This method of filtering the product collection by the search result does not use the catalogsearch_result table try { $data = Mage::helper('algoliasearch')->getSearchResult($query, Mage::app()->getStore()->getId()); } catch (Exception $e) { Mage::getSingleton('catalog/session')->addError(Mage::helper('algoliasearch')->__('Search failed. Please try again.')); $this->getSelect()->columns(['relevance' => new Zend_Db_Expr("e.entity_id")]); $this->getSelect()->where('e.entity_id = 0'); return $this; } $sortedIds = array_reverse(array_keys($data)); $this->getSelect()->columns(['relevance' => new Zend_Db_Expr("FIND_IN_SET(e.entity_id, '" . implode(',', $sortedIds) . "')")]); $this->getSelect()->where('e.entity_id IN (?)', $sortedIds); return $this; }