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()); }
/** * 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); }