コード例 #1
0
 /**
  * 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;
 }
コード例 #2
0
 /**
  * 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;
 }
コード例 #3
0
 /**
  * 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;
 }