/**
  * Append a sort by our custom positions when processing a fulltext search query
  *
  * @param Varien_Event_Observer $observer The observer
  *
  * @event smile_elasticsearch_query_assembled
  *
  * @return Smile_ElasticSearch_Model_Search_Term_Observer self reference
  */
 public function applyProductsPositions(Varien_Event_Observer $observer)
 {
     $data = $observer->getQueryData();
     $query = $data->getQuery();
     $fullTextQuery = Mage::helper('catalogsearch')->getQuery();
     if ($fullTextQuery->getId()) {
         $optimizer = Mage::getModel("smile_elasticsearch/search_term_optimizer");
         $query = $optimizer->applyCustomProductsPositions($query, $fullTextQuery);
         $data->setQuery($query);
     }
     return $this;
 }
 /**
  * Append a sort by our custom positions when viewing a virtual category
  *
  * @param Varien_Event_Observer $observer The observer
  *
  * @event smile_elasticsearch_query_assembled
  *
  * @return Smile_VirtualCategories_Model_Observer self reference
  */
 public function applyProductsPositions(Varien_Event_Observer $observer)
 {
     $data = $observer->getQueryData();
     $query = $data->getQuery();
     $category = Mage::registry("current_category");
     if ($category !== null && $category->getId() && $this->_getVirtualRule($category) !== null) {
         $optimizer = Mage::getModel("smile_virtualcategories/virtualCategory_product_position");
         $query = $optimizer->applyCustomProductsPositions($query, $category);
         $data->setQuery($query);
     }
     return $this;
 }