Exemplo n.º 1
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var PriceSorting $criteriaPart */
     $field = $this->fieldMapping->getPriceField($context);
     $sort = new FieldSort($field, strtolower($criteriaPart->getDirection()));
     $search->addSort($sort);
 }
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var ProductAttributeFacet $criteriaPart */
     $field = 'attributes.core.' . $criteriaPart->getField();
     $this->criteriaParts[] = $criteriaPart;
     switch ($criteriaPart->getMode()) {
         case ProductAttributeFacet::MODE_VALUE_LIST_RESULT:
         case ProductAttributeFacet::MODE_RADIO_LIST_RESULT:
             $aggregation = new TermsAggregation($criteriaPart->getName());
             $aggregation->setField($field);
             break;
         case ProductAttributeFacet::MODE_BOOLEAN_RESULT:
             $count = new ValueCountAggregation($criteriaPart->getName() . '_count');
             $count->setField($field);
             $aggregation = new FilterAggregation($criteriaPart->getName());
             $aggregation->setFilter(new ExistsFilter($field));
             $aggregation->addAggregation($count);
             break;
         case ProductAttributeFacet::MODE_RANGE_RESULT:
             $aggregation = new TermsAggregation($criteriaPart->getName());
             $aggregation->setField($field);
             break;
         default:
             return;
     }
     $search->addAggregation($aggregation);
 }
 /**
  * @inheritDoc
  */
 public function getRouteCollectionForRequest(Request $request)
 {
     if (!$this->manager) {
         throw new \Exception('Manager must be set to execute query to the elasticsearch');
     }
     $routeCollection = new RouteCollection();
     $requestPath = $request->getPathInfo();
     $search = new Search();
     $search->addQuery(new MatchQuery('url', $requestPath));
     $results = $this->manager->execute(array_keys($this->routeMap), $search, Result::RESULTS_OBJECT);
     try {
         foreach ($results as $document) {
             $type = $this->collector->getDocumentType(get_class($document));
             if (array_key_exists($type, $this->routeMap)) {
                 $route = new Route($document->url, ['_controller' => $this->routeMap[$type], 'document' => $document, 'type' => $type]);
                 $routeCollection->add('ongr_route_' . $route->getDefault('type'), $route);
             } else {
                 throw new RouteNotFoundException(sprintf('Route for type %s% cannot be generated.', $type));
             }
         }
     } catch (\Exception $e) {
         throw new RouteNotFoundException('Document is not correct or route cannot be generated.');
     }
     return $routeCollection;
 }
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /**@var ReleaseDateCondition $criteriaPart */
     $date = new \DateTime();
     $intervalSpec = 'P' . $criteriaPart->getDays() . 'D';
     $interval = new \DateInterval($intervalSpec);
     $dateNow = new \DateTime();
     switch ($criteriaPart->getDirection()) {
         case ReleaseDateCondition::DIRECTION_FUTURE:
             $date->add($interval);
             $range = ['lte' => $date->format('Y-m-d'), 'gt' => $dateNow->format('Y-m-d')];
             break;
         case ReleaseDateCondition::DIRECTION_PAST:
             $date->sub($interval);
             $range = ['gte' => $date->format('Y-m-d'), 'lte' => $dateNow->format('Y-m-d')];
             break;
         default:
             return;
     }
     $filter = new RangeFilter('formattedReleaseDate', $range);
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
Exemplo n.º 5
0
 /**
  * {@inheritdoc}
  */
 public function preProcessSearch(Search $search, Search $relatedSearch, FilterState $state = null)
 {
     $name = $state ? $state->getName() : $this->getField();
     $agg = new TermsAggregation($name);
     $agg->setField($this->getField());
     $search->addAggregation($agg);
 }
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     $aggregation = new TermsAggregation('manufacturer');
     $aggregation->setField('manufacturer.id');
     $aggregation->addParameter('size', self::AGGREGATION_SIZE);
     $search->addAggregation($aggregation);
 }
Exemplo n.º 7
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     $aggregation = new StatsAggregation('price');
     $field = $this->fieldMapping->getPriceField($context);
     $aggregation->setField($field);
     $search->addAggregation($aggregation);
 }
 /**
  * Data provider for testIteration.
  *
  * @return array
  */
 public function getIterationData()
 {
     $out = [];
     // Case #0: no search type set, with a sort, results should be sorted.
     $search = new Search();
     $search->setSize(2);
     $search->setScroll('1m');
     $search->addSort(new FieldSort('price'));
     $search->addQuery(new MatchAllQuery());
     $out[] = ['search' => $search, true];
     // Case #1: search type set to scan, with a sort, results should not be sorted.
     $search = new Search();
     $search->setSize(2);
     $search->setScroll('1m');
     $search->setSearchType('scan');
     $search->addSort(new FieldSort('price'));
     $search->addQuery(new MatchAllQuery());
     $out[] = ['search' => $search, false];
     // Case #3: minimum size, should give the same results.
     $search = new Search();
     $search->setSize(1);
     $search->setScroll('1m');
     $search->addSort(new FieldSort('price'));
     $search->addQuery(new MatchAllQuery());
     $out[] = ['search' => $search, true];
     return $out;
 }
Exemplo n.º 9
0
 /**
  * Match all test
  */
 public function testMatchAll()
 {
     $search = new Search();
     $matchAll = new MatchAllQuery();
     $search->addQuery($matchAll);
     $results = $this->executeSearch($search);
     $this->assertEquals($this->getDataArray()['product'], $results);
 }
Exemplo n.º 10
0
 public function testToArray()
 {
     $query = new TermQuery('foo', 'bar');
     $search = new Search();
     $search->addQuery($query);
     $hit = new ParentInnerHit('test', 'acme', $search);
     $expected = ['type' => ['acme' => ['query' => $query->toArray()]]];
     $this->assertEquals($expected, $hit->toArray());
 }
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     $aggregation = new ValueCountAggregation('has_available_variant_count');
     $aggregation->setField('hasAvailableVariant');
     $filter = new FilterAggregation('has_available_variant_filter');
     $filter->setFilter(new TermFilter('hasAvailableVariant', 1));
     $filter->addAggregation($aggregation);
     $search->addAggregation($filter);
 }
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     $aggregation = new ValueCountAggregation('shipping_free_count');
     $aggregation->setField('shippingFree');
     $filterAgg = new FilterAggregation('shipping_free_filter');
     $filterAgg->setFilter(new TermFilter('shippingFree', 1));
     $filterAgg->addAggregation($aggregation);
     $search->addAggregation($filterAgg);
 }
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     $filter = new TermFilter('shippingFree', 1);
     /** @var ShippingFreeCondition $criteriaPart */
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var CustomerGroupCondition $criteriaPart */
     $filter = new NotFilter(new TermsFilter('blockedCustomerGroupIds', $criteriaPart->getCustomerGroupIds()));
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var PropertyCondition $criteriaPart */
     $filter = new TermsFilter('properties.id', $criteriaPart->getValueIds());
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var VoteAverageCondition $criteriaPart */
     $range = new RangeFilter('voteAverage.average', ['gte' => $criteriaPart->getAverage()]);
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($range);
     } else {
         $search->addPostFilter($range);
     }
 }
Exemplo n.º 17
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var SalesCondition $criteriaPart */
     $filter = new RangeFilter('sales', ['gt' => $criteriaPart->getMinSales()]);
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var CategoryCondition $criteriaPart */
     $filter = new TermsFilter('categoryIds', $criteriaPart->getCategoryIds());
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var ManufacturerCondition $criteriaPart */
     $filter = new TermsFilter('manufacturer.id', $criteriaPart->getManufacturerIds());
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     $filter = new TermFilter('hasAvailableVariant', 1);
     /** @var ImmediateDeliveryCondition $criteriaPart */
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var HasPseudoPriceCondition $criteriaPart */
     $field = $this->getPseudoPriceField($context);
     $filter = new RangeFilter($field, ['gt' => 0]);
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
Exemplo n.º 22
0
 /**
  * Tests integration of the FiltersAggregation anonymous example from the documentation.
  *
  * @link https://github.com/ongr-io/ElasticsearchDSL/blob/master/docs/Aggregation/Filters.md#anonymous-example
  */
 public function testFiltersAggregationAnonymousExample()
 {
     $errorTermFilter = new TermQuery('body', 'error');
     $warningTermFilter = new TermQuery('body', 'warning');
     $histogramAggregation = new HistogramAggregation('monthly', 'timestamp');
     $histogramAggregation->setInterval('1M');
     $filterAggregation = new FiltersAggregation('grades_stats', ['error' => $errorTermFilter, 'warning' => $warningTermFilter], true);
     $filterAggregation->addAggregation($histogramAggregation);
     $search = new Search();
     $search->addAggregation($filterAggregation);
     $this->assertSame(['aggregations' => ['grades_stats' => ['filters' => ['filters' => [['term' => ['body' => 'error']], ['term' => ['body' => 'warning']]]], 'aggregations' => ['monthly' => ['histogram' => ['field' => 'timestamp', 'interval' => '1M']]]]]], $search->toArray());
 }
Exemplo n.º 23
0
 /**
  * Tests getters and setters for $name, $path and $query
  */
 public function testGettersAndSetters()
 {
     $query = new MatchQuery('acme', 'test');
     $search = new Search();
     $search->addQuery($query);
     $hit = new NestedInnerHit('test', 'acme', new Search());
     $hit->setName('foo');
     $hit->setPath('bar');
     $hit->setSearch($search);
     $this->assertEquals('foo', $hit->getName());
     $this->assertEquals('bar', $hit->getPath());
     $this->assertEquals($search, $hit->getSearch());
 }
Exemplo n.º 24
0
 private function searchBlog(Criteria $criteria, Struct\ProductContextInterface $context)
 {
     /**@var $condition SearchTermCondition*/
     $condition = $criteria->getCondition('search');
     $query = $this->createMultiMatchQuery($condition);
     $search = new Search();
     $search->addQuery($query);
     $search->setFrom(0)->setSize(5);
     $index = $this->indexFactory->createShopIndex($context->getShop());
     $params = ['index' => $index->getName(), 'type' => 'blog', 'body' => $search->toArray()];
     $raw = $this->client->search($params);
     return $this->createBlogStructs($raw);
 }
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /**@var CreateDateCondition $criteriaPart */
     $date = new \DateTime();
     $intervalSpec = 'P' . $criteriaPart->getDays() . 'D';
     $interval = new \DateInterval($intervalSpec);
     $date->sub($interval);
     $filter = new RangeFilter('formattedCreatedAt', ['gte' => $date->format('Y-m-d')]);
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
Exemplo n.º 26
0
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     $range = [];
     /** @var SalesCondition $criteriaPart */
     if ($criteriaPart->getMin() > 0) {
         $range['gte'] = (int) $criteriaPart->getMin();
     }
     if ($criteriaPart->getMax() > 0) {
         $range['lte'] = (int) $criteriaPart->getMax();
     }
     $filter = new RangeFilter('sales', $range);
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
Exemplo n.º 27
0
 /**
  * Paginate the search.
  *
  * @param  int|null $perPage
  * @param  string $pageName
  * @param  int|null $page
  * @return $this
  */
 public function paginate($perPage = null, $pageName = 'page', $page = null)
 {
     $perPage = $perPage ?: $this->getModel()->getPerPage();
     $page = $page ?: (int) Paginator::resolveCurrentPage($pageName);
     $this->search->setFrom($perPage * $page);
     $this->search->setSize($perPage);
     $results = $this->get();
     return new LengthAwarePaginator($results, $perPage, $page, ['path' => Paginator::resolveCurrentPath(), 'pageName' => $pageName]);
 }
Exemplo n.º 28
0
 /**
  * Append a query.
  *
  * @param $query
  *
  * @return $this
  */
 public function append($query)
 {
     if ($this->getFilteringState()) {
         $this->query->addFilter($query, $this->getBoolState());
     } else {
         $this->query->addQuery($query, $this->getBoolState());
     }
     return $this;
 }
Exemplo n.º 29
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     $field = $this->fieldMapping->getPriceField($context);
     $range = [];
     /** @var PriceCondition $criteriaPart */
     if ($criteriaPart->getMinPrice()) {
         $range['gte'] = $criteriaPart->getMinPrice();
     }
     if ($criteriaPart->getMaxPrice()) {
         $range['lte'] = $criteriaPart->getMaxPrice();
     }
     $filter = new RangeFilter($field, $range);
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
Exemplo n.º 30
0
 /**
  * @param string $path
  *
  * @return array
  */
 protected function getCategoriesByPath($path)
 {
     $nodeIds = array_filter(explode('/', $path));
     if (count($nodeIds) === 0) {
         return [];
     }
     $search = new Search();
     $search->addFilter(new IdsQuery(array_values($nodeIds)));
     $results = $this->manager->execute(['AppBundle:Category'], $search);
     $nodes = [];
     foreach ($results as $document) {
         $nodes[$document->getId()] = $document;
     }
     $sortedNodes = [];
     foreach ($nodeIds as $nodeId) {
         if (isset($nodes[$nodeId])) {
             $sortedNodes[] = $nodes[$nodeId];
         }
     }
     return $sortedNodes;
 }