コード例 #1
0
ファイル: Search.php プロジェクト: priyankajsr19/shalu
 public static function searchProducts($search_query, $p = 1, $n = 0, &$other)
 {
     if ($n == 0) {
         $n = (int) Tools::getValue('n', Configuration::get('PS_PRODUCTS_PER_PAGE'));
     }
     $p = 1;
     $other = false;
     $search_query = self::sanitize($search_query, 1);
     $start = ($p - 1) * $n;
     $rows = $n;
     global $cookie;
     //set the price field fro country
     $price_field = 'offer_price';
     if ($cookie->id_country == 110) {
         $price_field = 'offer_price_in';
     }
     if ($cookie->id_currency == 4) {
         $price_field = $price_field . "_rs";
     }
     // create a client instance
     $client = SolrSearch::getClient();
     // get a select query instance
     $query = $client->createSelect();
     $dismax = $query->getDisMax();
     $dismax->setPhraseFields('name');
     $dismax->setQueryFields('name^10 text^1.2 tags^3 reference^10 style_tips^15');
     $catFilter = $query->createFilterQuery('cat')->setQuery('+cat_id:1');
     $query->setQuery($search_query);
     $query->addSort('inStock', Solarium_Query_Select::SORT_DESC);
     $orderby = Tools::getValue('orderby');
     $orderway = Tools::getValue('orderway');
     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') {
             $orderby = 'sales';
         } elseif ($orderby == 'new') {
             $orderby = 'date_add';
         }
         $query->addSort($orderby, $way);
         /*if($orderby != 'hot')
           $query->addSort('sales', Solarium_Query_Select::SORT_DESC);*/
     } else {
         $query->addSort('score', Solarium_Query_Select::SORT_DESC);
         $query->addSort('date_add', Solarium_Query_Select::SORT_DESC);
         //$query->addSort('sales', Solarium_Query_Select::SORT_DESC);
     }
     //$query->addSort('sales', Solarium_Query_Select::SORT_DESC);
     //$query->addSort('date_add', Solarium_Query_Select::SORT_DESC);
     $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(50);
         $facet->setEnd(200);
     }
     $facet->addExclude($price_field);
     $facet->setInclude(Solarium_Query_Select_Component_Facet_Range::INCLUDE_UPPER);
     $facet->setOther(Solarium_Query_Select_Component_Facet_Range::OTHER_AFTER);
     $facet = $facetSet->createFacetRange('slaranges');
     $facet->setField('shipping_sla');
     $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('shipping_sla');
     $facet = $facetSet->createFacetField('fabric');
     $facet->setField('fabric');
     $facet->addExclude('fabrics');
     $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('brand_id');
     		$facet->setField('brand_id');
     		$facet->addExclude('brands');*/
     $query->setStart($start)->setRows($rows);
     $resultset = $client->select($query);
     if ($resultset->getNumFound() == 0) {
         $dismax->setMinimumMatch(0);
         $resultset = $client->select($query);
         $other = true;
     }
     SolrSearch::cacheResult($query, $resultset);
     return $resultset;
 }