Beispiel #1
0
 public function testSetFacets()
 {
     $fq1 = new FacetQuery();
     $fq1->setKey('f1')->setQuery('category:1');
     $fq2 = new FacetQuery();
     $fq2->setKey('f2')->setQuery('category:2');
     $facets = array('f1' => $fq1, 'f2' => $fq2);
     $this->facetSet->addFacets($facets);
     $fq3 = new FacetQuery();
     $fq3->setKey('f3')->setQuery('category:3');
     $fq4 = new FacetQuery();
     $fq4->setKey('f4')->setQuery('category:4');
     $facets = array('f3' => $fq3, 'f4' => $fq4);
     $this->facetSet->setFacets($facets);
     $this->assertEquals($facets, $this->facetSet->getFacets());
 }
Beispiel #2
0
 /**
  * Add request settings for FacetSet.
  *
  * @throws UnexpectedValueException
  *
  * @param FacetsetComponent $component
  * @param Request           $request
  *
  * @return Request
  */
 public function buildComponent($component, $request)
 {
     $facets = $component->getFacets();
     if (count($facets) !== 0) {
         // enable faceting
         $request->addParam('facet', 'true');
         // global facet params
         $request->addParam('facet.sort', $component->getSort());
         $request->addParam('facet.prefix', $component->getPrefix());
         $request->addParam('facet.contains', $component->getContains());
         $request->addParam('facet.contains.ignoreCase', is_null($ignoreCase = $component->getContainsIgnoreCase()) ? null : ($ignoreCase ? 'true' : 'false'));
         $request->addParam('facet.missing', $component->getMissing());
         $request->addParam('facet.mincount', $component->getMinCount());
         $request->addParam('facet.limit', $component->getLimit());
         foreach ($facets as $facet) {
             switch ($facet->getType()) {
                 case FacetsetComponent::FACET_FIELD:
                     $this->addFacetField($request, $facet);
                     break;
                 case FacetsetComponent::FACET_QUERY:
                     $this->addFacetQuery($request, $facet);
                     break;
                 case FacetsetComponent::FACET_MULTIQUERY:
                     $this->addFacetMultiQuery($request, $facet);
                     break;
                 case FacetsetComponent::FACET_RANGE:
                     $this->addFacetRange($request, $facet);
                     break;
                 case FacetsetComponent::FACET_PIVOT:
                     $this->addFacetPivot($request, $facet);
                     break;
                 case FacetsetComponent::FACET_INTERVAL:
                     $this->addFacetInterval($request, $facet);
                     break;
                 default:
                     throw new UnexpectedValueException('Unknown facet type');
             }
         }
     }
     return $request;
 }
 /**
  * Parse result data into result objects
  *
  * @throws RuntimeException
  * @param  Query            $query
  * @param  QueryFacetSet    $facetSet
  * @param  array            $data
  * @return ResultFacetSet
  */
 public function parse($query, $facetSet, $data)
 {
     if ($facetSet->getExtractFromResponse() === true) {
         if (empty($data['facet_counts']) === false) {
             foreach ($data['facet_counts'] as $key => $facets) {
                 switch ($key) {
                     case 'facet_fields':
                         $method = 'createFacetField';
                         break;
                     case 'facet_queries':
                         $method = 'createFacetQuery';
                         break;
                     case 'facet_ranges':
                         $method = 'createFacetRange';
                         break;
                     case 'facet_pivot':
                         $method = 'createFacetPivot';
                         break;
                 }
                 foreach ($facets as $k => $facet) {
                     $facetObject = $facetSet->{$method}($k);
                     if ($key == 'facet_pivot') {
                         $facetObject->setFields($k);
                     }
                 }
             }
         }
     }
     $facets = array();
     foreach ($facetSet->getFacets() as $key => $facet) {
         switch ($facet->getType()) {
             case QueryFacetSet::FACET_FIELD:
                 $result = $this->facetField($query, $facet, $data);
                 break;
             case QueryFacetSet::FACET_QUERY:
                 $result = $this->facetQuery($facet, $data);
                 break;
             case QueryFacetSet::FACET_MULTIQUERY:
                 $result = $this->facetMultiQuery($facet, $data);
                 break;
             case QueryFacetSet::FACET_RANGE:
                 $result = $this->facetRange($query, $facet, $data);
                 break;
             case QueryFacetSet::FACET_PIVOT:
                 $result = $this->facetPivot($query, $facet, $data);
                 break;
             default:
                 throw new RuntimeException('Unknown facet type');
         }
         if ($result !== null) {
             $facets[$key] = $result;
         }
     }
     return $this->createFacetSet($facets);
 }