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