AggregationFactory.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Elasticsearch\SearchAdapter;
  7. use Magento\Framework\ObjectManagerInterface;
  8. /**
  9. * Aggregation Factory
  10. * @api
  11. * @since 100.1.0
  12. */
  13. class AggregationFactory
  14. {
  15. /**
  16. * Object Manager instance
  17. *
  18. * @var ObjectManagerInterface
  19. * @since 100.1.0
  20. */
  21. protected $objectManager;
  22. /**
  23. * @param ObjectManagerInterface $objectManager
  24. */
  25. public function __construct(ObjectManagerInterface $objectManager)
  26. {
  27. $this->objectManager = $objectManager;
  28. }
  29. /**
  30. * Create Aggregation instance
  31. *
  32. * @param array $rawAggregation
  33. * @return \Magento\Framework\Search\Response\Aggregation
  34. * @since 100.1.0
  35. */
  36. public function create(array $rawAggregation)
  37. {
  38. $buckets = [];
  39. foreach ($rawAggregation as $rawBucketName => $rawBucket) {
  40. /** @var \Magento\Framework\Search\Response\Bucket[] $buckets */
  41. $buckets[$rawBucketName] = $this->objectManager->create(
  42. \Magento\Framework\Search\Response\Bucket::class,
  43. [
  44. 'name' => $rawBucketName,
  45. 'values' => $this->prepareValues($rawBucket)
  46. ]
  47. );
  48. }
  49. return $this->objectManager->create(
  50. \Magento\Framework\Search\Response\Aggregation::class,
  51. ['buckets' => $buckets]
  52. );
  53. }
  54. /**
  55. * Prepare values list
  56. *
  57. * @param array $values
  58. * @return \Magento\Framework\Search\Response\Aggregation\Value[]
  59. */
  60. private function prepareValues(array $values)
  61. {
  62. $valuesObjects = [];
  63. foreach ($values as $name => $value) {
  64. $valuesObjects[] = $this->objectManager->create(
  65. \Magento\Framework\Search\Response\Aggregation\Value::class,
  66. [
  67. 'value' => $name,
  68. 'metrics' => $value,
  69. ]
  70. );
  71. }
  72. return $valuesObjects;
  73. }
  74. }