| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | 
							- <?php
 
- /**
 
-  * Copyright © Magento, Inc. All rights reserved.
 
-  * See COPYING.txt for license details.
 
-  */
 
- namespace Magento\Framework\Search\Dynamic\Algorithm;
 
- use Magento\Framework\DB\Ddl\Table;
 
- use Magento\Framework\Search\Adapter\OptionsInterface;
 
- use Magento\Framework\Search\Dynamic\Algorithm;
 
- use Magento\Framework\Search\Dynamic\DataProviderInterface;
 
- use Magento\Framework\Search\Request\BucketInterface;
 
- class Improved implements AlgorithmInterface
 
- {
 
-     /**
 
-      * @var Algorithm
 
-      */
 
-     private $algorithm;
 
-     /**
 
-      * @var DataProviderInterface
 
-      */
 
-     private $dataProvider;
 
-     /**
 
-      * @var OptionsInterface
 
-      */
 
-     private $options;
 
-     /**
 
-      * @param DataProviderInterface $dataProvider
 
-      * @param Algorithm $algorithm
 
-      * @param OptionsInterface $options
 
-      */
 
-     public function __construct(
 
-         DataProviderInterface $dataProvider,
 
-         Algorithm $algorithm,
 
-         OptionsInterface $options
 
-     ) {
 
-         $this->algorithm = $algorithm;
 
-         $this->dataProvider = $dataProvider;
 
-         $this->options = $options;
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function getItems(
 
-         BucketInterface $bucket,
 
-         array $dimensions,
 
-         \Magento\Framework\Search\Dynamic\EntityStorage $entityStorage
 
-     ) {
 
-         $aggregations = $this->dataProvider->getAggregations($entityStorage);
 
-         $options = $this->options->get();
 
-         if ($aggregations['count'] < $options['interval_division_limit']) {
 
-             return [];
 
-         }
 
-         $this->algorithm->setStatistics(
 
-             $aggregations['min'],
 
-             $aggregations['max'],
 
-             $aggregations['std'],
 
-             $aggregations['count']
 
-         );
 
-         $this->algorithm->setLimits($aggregations['min'], $aggregations['max'] + 0.01);
 
-         $interval = $this->dataProvider->getInterval($bucket, $dimensions, $entityStorage);
 
-         $data = $this->algorithm->calculateSeparators($interval);
 
-         $data[0]['from'] = ''; // We should not calculate min and max value
 
-         $data[count($data) - 1]['to'] = '';
 
-         $dataSize = count($data);
 
-         for ($key = 0; $key < $dataSize; $key++) {
 
-             if (isset($data[$key + 1])) {
 
-                 $data[$key]['to'] = $data[$key + 1]['from'];
 
-             }
 
-         }
 
-         return $data;
 
-     }
 
- }
 
 
  |