/**
  * @param unknown_type $id_category
  * @param unknown_type $search_query
  * @param unknown_type $id_manufacturer
  * @param unknown_type $selectedFilters
  * @return Solarium_Result_Select
  */
 public function getResults($id_category, $search_query, $id_manufacturer, $selectedFilters = array(), $andquery = TRUE)
 {
     global $cookie, $cart, $smarty;
     //set the price field fro country
     $price_field = 'offer_price';
     $sla_field = 'shipping_sla';
     //get the right address for this cart
     $id_country = (int) Country::getDefaultCountryId();
     if ($cart->id_address_delivery) {
         $address = new Address($cart->id_address_delivery);
         if ($address->id_country) {
             $id_country = $address->id_country;
         } elseif (isset($cookie->id_country)) {
             $id_country = (int) $cookie->id_country;
         }
     }
     $curr_currency = CurrencyCore::getCurrency($cookie->id_currency);
     $conversion_rate = $curr_currency['conversion_rate'];
     $smarty->assign('price_tax_country', $id_country);
     if ($id_country == 110) {
         $price_field = 'offer_price_in';
     }
     if ($cookie->id_currency == 4) {
         $price_field = $price_field . "_rs";
     }
     $new_products = Tools::getValue('latest', false);
     $sale_products = Tools::getValue('sale', false);
     $express_shipping = Tools::getValue('express_shipping', false);
     $cat_id = Tools::getValue('cat_id', false);
     if ($this->resultSet) {
         return $this->resultSet;
     }
     $n = (int) Tools::getValue('n', Configuration::get('PS_PRODUCTS_PER_PAGE'));
     $start = ((int) Tools::getValue('p', 1) - 1) * $n;
     $rows = $n;
     $orderby = Tools::getValue('orderby');
     $orderway = Tools::getValue('orderway');
     //get the facet info
     // create a client instance
     $client = SolrSearch::getClient();
     // get a select query instance
     $query = $client->createSelect();
     if ($new_products) {
         $query->setQuery('date_add:[NOW/DAY-1MONTH/DAY TO *]');
     } else {
         if ($sale_products) {
             $query->setQuery('discount:[1 TO *]');
         } else {
             if ($express_shipping) {
                 $query->setQuery('shipping_sla:[1 TO 2]');
             }
         }
     }
     if ($search_query) {
         $dismax = $query->getDisMax();
         $dismax->setQueryFields('name^10 text^1.2 tags^3 reference^10 style_tips^15');
         $query->setQuery($search_query);
     }
     // add filter queries
     if ($id_category) {
         $catFilter = $query->createFilterQuery('cat')->setQuery('+cat_id:' . $id_category);
     }
     if ($id_manufacturer) {
         $manFilter = $query->createFilterQuery('man')->setQuery('+brand_id:' . $id_manufacturer);
         $id_categories = Tools::getValue('cat_id');
         if (!empty($id_categories)) {
             $id_categories = explode("-", $id_categories);
             if (is_array($id_categories)) {
                 $id_categories = implode(" OR ", $id_categories);
                 $query->createFilterQuery("des_cat")->setQuery("cat_id: ({$id_categories})");
             }
         }
     }
     if (isset($selectedFilters['pr']) && count($selectedFilters['pr']) > 0) {
         $filterquery = '+' . $price_field . ':(';
         $pricefilter = $query->createFilterQuery('maxprice');
         $pricefilter->addTag($price_field);
         $selectedPrices = array();
         foreach ($selectedFilters['pr'] as $range) {
             if ($cookie->id_currency == 4) {
                 switch ($range['id']) {
                     case 1:
                         $selectedPrices[] = '[1 TO 1000]';
                         break;
                     case 2:
                         $selectedPrices[] = '[1001 TO 2500]';
                         break;
                     case 3:
                         $selectedPrices[] = '[2501 TO 5000]';
                         break;
                     case 4:
                         $selectedPrices[] = '[5001 TO 10000]';
                         break;
                     case 5:
                         $selectedPrices[] = '[10001 TO *]';
                         break;
                 }
             } else {
                 switch ($range['id']) {
                     case 1:
                         $selectedPrices[] = '[' . Tools::ps_round(1 / $conversion_rate) . ' TO ' . Tools::ps_round(50 / $conversion_rate) . ']';
                         break;
                     case 2:
                         $selectedPrices[] = '[' . Tools::ps_round(51 / $conversion_rate) . ' TO ' . Tools::ps_round(100 / $conversion_rate) . ']';
                         break;
                     case 3:
                         $selectedPrices[] = '[' . Tools::ps_round(101 / $conversion_rate) . ' TO ' . Tools::ps_round(150 / $conversion_rate) . ']';
                         break;
                     case 4:
                         $selectedPrices[] = '[' . Tools::ps_round(151 / $conversion_rate) . ' TO ' . Tools::ps_round(200 / $conversion_rate) . ']';
                         break;
                     case 5:
                         $selectedPrices[] = '[' . Tools::ps_round(201 / $conversion_rate) . ' TO *]';
                         break;
                 }
             }
         }
         $filterquery .= implode(" OR ", $selectedPrices);
         $pricefilter->setQuery($filterquery . ")");
     }
     if (isset($selectedFilters['manufacturer']) && count($selectedFilters['manufacturer']) > 0) {
         $brandfilter = $query->createFilterQuery('brand');
         $brandfilter->addTag('brands');
         $brandQuery = '+brand_id:(';
         $brandsSelected = array();
         foreach ($selectedFilters['manufacturer'] as $brand) {
             $brandsSelected[] = $brand['id'];
         }
         $brandQuery .= implode(" OR ", $brandsSelected);
         $brandfilter->setQuery($brandQuery . ")");
     }
     if (isset($selectedFilters['fabric']) && count($selectedFilters['fabric']) > 0) {
         $fabricfilter = $query->createFilterQuery('fabric');
         $fabricfilter->addTag('fabrics');
         $fabricQuery = '+fabric:(';
         $fabricsSelected = array();
         foreach ($selectedFilters['fabric'] as $fabric) {
             $fabricsSelected[] = $fabric['id'];
         }
         $fabricQuery .= implode(" OR ", $fabricsSelected);
         $fabricfilter->setQuery($fabricQuery . ")");
     }
     if (isset($selectedFilters['stone']) && count($selectedFilters['stone']) > 0) {
         $stonefilter = $query->createFilterQuery('stone');
         $stonefilter->addTag('stones');
         $stoneQuery = '+stone:(';
         $stonesSelected = array();
         foreach ($selectedFilters['stone'] as $stone) {
             $stonesSelected[] = $stone['id'];
         }
         $stoneQuery .= implode(" OR ", $stonesSelected);
         $stonefilter->setQuery($stoneQuery . ")");
     }
     if (isset($selectedFilters['plating']) && count($selectedFilters['plating']) > 0) {
         $platingfilter = $query->createFilterQuery('plating');
         $platingfilter->addTag('platings');
         $platingQuery = '+plating:(';
         $platingsSelected = array();
         foreach ($selectedFilters['plating'] as $plating) {
             $platingsSelected[] = $plating['id'];
         }
         $platingQuery .= implode(" OR ", $platingsSelected);
         $platingfilter->setQuery($platingQuery . ")");
     }
     if (isset($selectedFilters['material']) && count($selectedFilters['material']) > 0) {
         $materialfilter = $query->createFilterQuery('material');
         $materialfilter->addTag('materials');
         $materialQuery = '+material:(';
         $materialsSelected = array();
         foreach ($selectedFilters['material'] as $material) {
             $materialsSelected[] = $material['id'];
         }
         $materialQuery .= implode(" OR ", $materialsSelected);
         $materialfilter->setQuery($materialQuery . ")");
     }
     if (isset($selectedFilters['look']) && count($selectedFilters['look']) > 0) {
         $lookfilter = $query->createFilterQuery('look');
         $lookfilter->addTag('looks');
         $lookQuery = '+look:(';
         $looksSelected = array();
         foreach ($selectedFilters['look'] as $look) {
             $looksSelected[] = $look['id'];
         }
         $lookQuery .= implode(" OR ", $looksSelected);
         $lookfilter->setQuery($lookQuery . ")");
     }
     if (isset($selectedFilters['size']) && count($selectedFilters['size']) > 0) {
         $sizefilter = $query->createFilterQuery('size');
         $sizefilter->addTag('sizes');
         $sizeQuery = '+size:(';
         $sizesSelected = array();
         foreach ($selectedFilters['size'] as $size) {
             $sizesSelected[] = $size['id'];
         }
         $sizeQuery .= implode(" OR ", $sizesSelected);
         $sizefilter->setQuery($sizeQuery . ")");
     }
     if (isset($selectedFilters['customization']) && count($selectedFilters['customization']) > 0) {
         $custfilter = $query->createFilterQuery('cust');
         $custfilter->addTag('customizations');
         $custQuery = '+is_customizable:(';
         $custsSelected = array();
         foreach ($selectedFilters['customization'] as $cust) {
             $custsSelected[] = $cust['id'];
         }
         $custQuery .= implode(" OR ", $custsSelected);
         $custfilter->setQuery($custQuery . ")");
     }
     if (isset($selectedFilters['color']) && count($selectedFilters['color']) > 0) {
         $colorfilter = $query->createFilterQuery('color');
         $colorfilter->addTag('colors');
         $colorQuery = '+color:(';
         $colorsSelected = array();
         foreach ($selectedFilters['color'] as $color) {
             $colorsSelected[] = $color['id'];
         }
         $colorQuery .= implode(" OR ", $colorsSelected);
         $colorfilter->setQuery($colorQuery . ")");
     }
     if (isset($selectedFilters['handbag_occasion']) && count($selectedFilters['handbag_occasion']) > 0) {
         $handbag_occasionfilter = $query->createFilterQuery('handbag_occasion');
         $handbag_occasionfilter->addTag('handbag_occasions');
         $handbag_occasionQuery = '+handbag_occasion:(';
         $handbag_occasionsSelected = array();
         foreach ($selectedFilters['handbag_occasion'] as $handbag_occasion) {
             $handbag_occasionsSelected[] = $handbag_occasion['id'];
         }
         $handbag_occasionQuery .= implode(" OR ", $handbag_occasionsSelected);
         $handbag_occasionfilter->setQuery($handbag_occasionQuery . ")");
     }
     if (isset($selectedFilters['handbag_style']) && count($selectedFilters['handbag_style']) > 0) {
         $handbag_stylefilter = $query->createFilterQuery('handbag_style');
         $handbag_stylefilter->addTag('handbag_styles');
         $handbag_styleQuery = '+handbag_style:(';
         $handbag_stylesSelected = array();
         foreach ($selectedFilters['handbag_style'] as $handbag_style) {
             $handbag_stylesSelected[] = $handbag_style['id'];
         }
         $handbag_styleQuery .= implode(" OR ", $handbag_stylesSelected);
         $handbag_stylefilter->setQuery($handbag_styleQuery . ")");
     }
     if (isset($selectedFilters['handbag_material']) && count($selectedFilters['handbag_material']) > 0) {
         $handbag_materialfilter = $query->createFilterQuery('handbag_material');
         $handbag_materialfilter->addTag('handbag_materials');
         $handbag_materialQuery = '+handbag_material:(';
         $handbag_materialsSelected = array();
         foreach ($selectedFilters['handbag_material'] as $handbag_material) {
             $handbag_materialsSelected[] = $handbag_material['id'];
         }
         $handbag_materialQuery .= implode(" OR ", $handbag_materialsSelected);
         $handbag_materialfilter->setQuery($handbag_materialQuery . ")");
     }
     if (isset($selectedFilters['sla']) && count($selectedFilters['sla']) > 0) {
         $filterquery = '+' . $sla_field . ':(';
         $slafilter = $query->createFilterQuery('shipping_sla');
         $slafilter->addTag($sla_field);
         $selectedSlas = array();
         foreach ($selectedFilters['sla'] as $range) {
             switch ($range['id']) {
                 case 1:
                     $selectedSlas[] = '[1 TO 5]';
                     break;
                 case 2:
                     $selectedSlas[] = '[6 TO 10]';
                     break;
                 case 3:
                     $selectedSlas[] = '[11 TO 15]';
                     break;
                 case 4:
                     $selectedSlas[] = '[16 TO 20]';
                     break;
                 case 5:
                     $selectedSlas[] = '[21 TO *]';
                     break;
             }
         }
         $filterquery .= implode(" OR ", $selectedSlas);
         $slafilter->setQuery($filterquery . ")");
     }
     $facetSet = $query->getFacetSet();
     $facetSet->setMinCount(1);
     $facetSet->createFacetField('cat_id')->setField('cat_id');
     $facet = $facetSet->createFacetRange('priceranges');
     $facet->setField($price_field);
     $facet->setStart(0);
     if ($cookie->id_currency == 4) {
         $facet->setGap(500);
         $facet->setEnd(10000);
     } else {
         $facet->setGap(Tools::ps_round(50 / $conversion_rate));
         $facet->setEnd(Tools::ps_round(200 / $conversion_rate));
     }
     $facet->setInclude(Solarium_Query_Select_Component_Facet_Range::INCLUDE_UPPER);
     $facet->setOther(Solarium_Query_Select_Component_Facet_Range::OTHER_AFTER);
     $facet->addExclude($price_field);
     $facet = $facetSet->createFacetRange('slaranges');
     $facet->setField($sla_field);
     $facet->setStart(0);
     $facet->setGap(5);
     $facet->setEnd(20);
     $facet->setInclude(Solarium_Query_Select_Component_Facet_Range::INCLUDE_UPPER);
     $facet->setOther(Solarium_Query_Select_Component_Facet_Range::OTHER_AFTER);
     $facet->addExclude($sla_field);
     if (!$id_manufacturer) {
         $facet = $facetSet->createFacetField('brand_id');
         $facet->setField('brand_id');
         $facet->addExclude('brands');
     }
     $facet = $facetSet->createFacetField('stone');
     $facet->setField('stone');
     $facet->addExclude('stones');
     $facet = $facetSet->createFacetField('plating');
     $facet->setField('plating');
     $facet->addExclude('platings');
     $facet = $facetSet->createFacetField('material');
     $facet->setField('material');
     $facet->addExclude('materials');
     $facet = $facetSet->createFacetField('look');
     $facet->setField('look');
     $facet->addExclude('looks');
     $facet = $facetSet->createFacetField('fabric');
     $facet->setField('fabric');
     $facet->addExclude('fabrics');
     $facet = $facetSet->createFacetField('size');
     $facet->setField('size');
     $facet->addExclude('sizes');
     $facet = $facetSet->createFacetField('is_customizable');
     $facet->setField('is_customizable');
     $facet->addExclude('customizations');
     $facet = $facetSet->createFacetField('color');
     $facet->setField('color');
     $facet->addExclude('colors');
     $facet = $facetSet->createFacetField('handbag_occasion');
     $facet->setField('handbag_occasion');
     $facet->addExclude('handbag_occasions');
     $facet = $facetSet->createFacetField('handbag_style');
     $facet->setField('handbag_style');
     $facet->addExclude('handbag_styles');
     $facet = $facetSet->createFacetField('handbag_material');
     $facet->setField('handbag_material');
     $facet->addExclude('handbag_materials');
     $facet = $facetSet->createFacetField('shipping_sla');
     $facet->setField('shipping_sla');
     $facet->addExclude('shipping_slas');
     $query->setStart($start)->setRows($rows);
     $query->addSort('inStock', Solarium_Query_Select::SORT_DESC);
     if ($orderby && $orderway) {
         $way = Solarium_Query_Select::SORT_DESC;
         if ($orderby == 'price') {
             $orderby = $price_field;
             if ($orderway == 'asc') {
                 $way = Solarium_Query_Select::SORT_ASC;
             } else {
                 $way = Solarium_Query_Select::SORT_DESC;
             }
         } elseif ($orderby == 'discount') {
             $orderby = 'discount';
         } elseif ($orderby == 'hot') {
             if ($search_query) {
                 $query->addSort('score', Solarium_Query_Select::SORT_DESC);
             }
             $orderby = 'sales';
         } elseif ($orderby == 'new') {
             if ($search_query) {
                 $query->addSort('score', Solarium_Query_Select::SORT_DESC);
             }
             $orderby = 'date_add';
         }
         if ($express_shipping) {
             $query->addSort('shipping_sla', Solarium_Query_Select::SORT_ASC);
         }
         $query->addSort($orderby, $way);
         /*if ($orderby != 'hot') {
               $query->addSort('sales', Solarium_Query_Select::SORT_DESC);
               $query->addSort('date_add', Solarium_Query_Select::SORT_DESC);
           }*/
     } elseif ($search_query) {
         $query->addSort('score', Solarium_Query_Select::SORT_DESC);
         //$query->addSort('sales', Solarium_Query_Select::SORT_DESC);
         $query->addSort('date_add', Solarium_Query_Select::SORT_DESC);
     } else {
         if ($express_shipping) {
             $query->addSort('shipping_sla', Solarium_Query_Select::SORT_ASC);
         } else {
             //$query->addSort('sales', Solarium_Query_Select::SORT_DESC);
             $query->addSort('date_add', Solarium_Query_Select::SORT_DESC);
         }
     }
     $this->resultSet = SolrSearch::getFromCache($query);
     if (!$this->resultSet) {
         $this->resultSet = $client->select($query);
         if ($this->resultSet->getNumFound() == 0) {
             if (isset($dismax)) {
                 $dismax->setMinimumMatch(0);
             }
             $this->resultSet = $client->select($query);
         }
     }
     return $this->resultSet;
 }