/**
  * @return \Elastica\Aggregation\AbstractAggregation
  */
 public function createAggregation()
 {
     $fieldName = $this->facetConfigTransfer->getFieldName();
     $facetValueAgg = $this->aggregationBuilder->createTermsAggregation($fieldName . self::VALUE_SUFFIX)->setField($this->addNestedFieldPrefix($fieldName, self::FACET_VALUE));
     $facetNameAgg = $this->createFacetNameAggregation($fieldName)->addAggregation($facetValueAgg);
     return $this->createNestedFacetAggregation($fieldName, $facetNameAgg);
 }
Example #2
0
 /**
  * @param array $aggregations
  * @param array $requestParameters
  *
  * @return \Spryker\Shared\Transfer\TransferInterface
  */
 public function extractDataFromAggregations(array $aggregations, array $requestParameters)
 {
     $parameterName = $this->facetConfigTransfer->getParameterName();
     $fieldName = $this->facetConfigTransfer->getFieldName();
     list($min, $max) = $this->extractRangeData($aggregations, $parameterName, $fieldName);
     $rangeResultTransfer = new RangeSearchResultTransfer();
     $rangeResultTransfer->setName($parameterName)->setMin($min)->setMax($max);
     return $rangeResultTransfer;
 }
Example #3
0
 /**
  * @param array $aggregations
  * @param array $requestParameters
  *
  * @return \Spryker\Shared\Transfer\TransferInterface
  */
 public function extractDataFromAggregations(array $aggregations, array $requestParameters)
 {
     $parameterName = $this->facetConfigTransfer->getParameterName();
     $facetResultValueTransfers = $this->extractFacetData($aggregations);
     $facetResultTransfer = new FacetSearchResultTransfer();
     $facetResultTransfer->setName($parameterName)->setValues($facetResultValueTransfers);
     if (isset($requestParameters[$parameterName])) {
         $facetResultTransfer->setActiveValue($requestParameters[$parameterName]);
     }
     return $facetResultTransfer;
 }
 /**
  * @param array $aggregations
  * @param \Generated\Shared\Transfer\FacetConfigTransfer $facetConfigTransfer
  *
  * @return array
  */
 protected function getAggregationRawData(array $aggregations, $facetConfigTransfer)
 {
     $facetName = $facetConfigTransfer->getName();
     $fieldName = $facetConfigTransfer->getFieldName();
     if ($facetConfigTransfer->getIsMultiValued() === true) {
         $aggregation = $aggregations[FacetQueryExpanderPlugin::AGGREGATION_GLOBAL_PREFIX . $facetName][FacetQueryExpanderPlugin::AGGREGATION_FILTER_NAME][$fieldName];
     } else {
         $aggregation = $aggregations[$fieldName];
     }
     return $aggregation;
 }
 /**
  * @param \Generated\Shared\Transfer\FacetConfigTransfer $facetConfigTransfer
  *
  * @return \Spryker\Client\Search\Model\Elasticsearch\AggregationExtractor\AggregationExtractorInterface
  */
 protected function createByType(FacetConfigTransfer $facetConfigTransfer)
 {
     switch ($facetConfigTransfer->getType()) {
         case FacetConfigBuilder::TYPE_RANGE:
         case FacetConfigBuilder::TYPE_PRICE_RANGE:
             return $this->createRangeExtractor($facetConfigTransfer);
         case FacetConfigBuilder::TYPE_CATEGORY:
             return $this->createCategoryExtractor($facetConfigTransfer);
         default:
             return $this->createFacetExtractor($facetConfigTransfer);
     }
 }
Example #6
0
 /**
  * @return \Elastica\Query\Nested
  */
 public function createNestedQuery()
 {
     $fieldName = $this->facetConfigTransfer->getFieldName();
     $nestedFieldName = $this->facetConfigTransfer->getName();
     return $this->bindMultipleNestedQuery($fieldName, [$this->queryBuilder->createTermQuery($fieldName . self::FACET_NAME_SUFFIX, $nestedFieldName), $this->queryBuilder->createRangeQuery($fieldName . self::FACET_VALUE_SUFFIX, $this->minValue, $this->maxValue)]);
 }
 /**
  * @param \Generated\Shared\Transfer\FacetConfigTransfer $facetConfigTransfer
  * @param \Elastica\Query\BoolQuery $boolQuery
  * @param \Elastica\Query\AbstractQuery[] $facetFilters
  *
  * @return \Elastica\Query\BoolQuery
  */
 protected function getGlobalAggregationFilters(FacetConfigTransfer $facetConfigTransfer, BoolQuery $boolQuery, array $facetFilters)
 {
     $aggregationFilterQuery = clone $boolQuery;
     // add filters for facet aggregation which is not related to the current facet so we can get the right counts
     foreach ($facetFilters as $name => $query) {
         if ($name !== $facetConfigTransfer->getName()) {
             $aggregationFilterQuery->addFilter($query);
         }
     }
     return $aggregationFilterQuery;
 }
Example #8
0
 /**
  * @param \Generated\Shared\Transfer\FacetConfigTransfer $facetConfigTransfer
  *
  * @return void
  */
 protected function assertFacetConfigTransfer(FacetConfigTransfer $facetConfigTransfer)
 {
     $facetConfigTransfer->requireName()->requireFieldName()->requireParameterName()->requireType();
 }
 /**
  * @param \Generated\Shared\Transfer\FacetConfigTransfer $facetConfigTransfer
  *
  * @return string|null
  */
 protected function getFacetValueType(FacetConfigTransfer $facetConfigTransfer)
 {
     return $this->indexMap->getType($facetConfigTransfer->getFieldName() . '.facet-value');
 }
 /**
  * @return \Elastica\Aggregation\AbstractAggregation
  */
 public function createAggregation()
 {
     $fieldName = $this->facetConfigTransfer->getFieldName();
     return $this->aggregationBuilder->createTermsAggregation($fieldName)->setField($fieldName);
 }
Example #11
0
 /**
  * @param \Generated\Shared\Transfer\FacetConfigTransfer $facetConfigTransfer
  * @param string $filterValue
  *
  * @return \Elastica\Query\Term
  */
 protected function createTermQuery(FacetConfigTransfer $facetConfigTransfer, $filterValue)
 {
     return $this->queryBuilder->createTermQuery($facetConfigTransfer->getFieldName(), $filterValue);
 }