Builder.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Elasticsearch\Elasticsearch5\SearchAdapter\Query;
  7. use Magento\Framework\Search\RequestInterface;
  8. use Magento\Elasticsearch\Model\Config;
  9. use Magento\Elasticsearch\SearchAdapter\SearchIndexNameResolver;
  10. use Magento\Elasticsearch\SearchAdapter\Query\Builder\Aggregation as AggregationBuilder;
  11. use Magento\Framework\App\ScopeResolverInterface;
  12. /**
  13. * @api
  14. * @since 100.2.2
  15. */
  16. class Builder
  17. {
  18. /**
  19. * @var Config
  20. * @since 100.2.2
  21. */
  22. protected $clientConfig;
  23. /**
  24. * @var SearchIndexNameResolver
  25. * @since 100.2.2
  26. */
  27. protected $searchIndexNameResolver;
  28. /**
  29. * @var AggregationBuilder
  30. * @since 100.2.2
  31. */
  32. protected $aggregationBuilder;
  33. /**
  34. * @var ScopeResolverInterface
  35. * @since 100.2.2
  36. */
  37. protected $scopeResolver;
  38. /**
  39. * @param Config $clientConfig
  40. * @param SearchIndexNameResolver $searchIndexNameResolver
  41. * @param AggregationBuilder $aggregationBuilder
  42. * @param ScopeResolverInterface $scopeResolver
  43. */
  44. public function __construct(
  45. Config $clientConfig,
  46. SearchIndexNameResolver $searchIndexNameResolver,
  47. AggregationBuilder $aggregationBuilder,
  48. ScopeResolverInterface $scopeResolver
  49. ) {
  50. $this->clientConfig = $clientConfig;
  51. $this->searchIndexNameResolver = $searchIndexNameResolver;
  52. $this->aggregationBuilder = $aggregationBuilder;
  53. $this->scopeResolver = $scopeResolver;
  54. }
  55. /**
  56. * Set initial settings for query
  57. *
  58. * @param RequestInterface $request
  59. * @return array
  60. * @since 100.2.2
  61. */
  62. public function initQuery(RequestInterface $request)
  63. {
  64. $dimension = current($request->getDimensions());
  65. $storeId = $this->scopeResolver->getScope($dimension->getValue())->getId();
  66. $searchQuery = [
  67. 'index' => $this->searchIndexNameResolver->getIndexName($storeId, $request->getIndex()),
  68. 'type' => $this->clientConfig->getEntityType(),
  69. 'body' => [
  70. 'from' => $request->getFrom(),
  71. 'size' => $request->getSize(),
  72. 'stored_fields' => ['_id', '_score'],
  73. 'query' => [],
  74. ],
  75. ];
  76. return $searchQuery;
  77. }
  78. /**
  79. * Add aggregations settings to query
  80. *
  81. * @param RequestInterface $request
  82. * @param array $searchQuery
  83. * @return array
  84. * @since 100.2.2
  85. */
  86. public function initAggregations(
  87. RequestInterface $request,
  88. array $searchQuery
  89. ) {
  90. return $this->aggregationBuilder->build($request, $searchQuery);
  91. }
  92. }