Mapper.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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\Search\RequestInterface;
  8. use Magento\Framework\Search\Request\QueryInterface as RequestQueryInterface;
  9. use Magento\Framework\Search\Request\Query\BoolExpression as BoolQuery;
  10. use Magento\Framework\Search\Request\Query\Filter as FilterQuery;
  11. use Magento\Framework\Search\Request\Query\Match as MatchQuery;
  12. use Magento\Elasticsearch\SearchAdapter\Query\Builder as QueryBuilder;
  13. use Magento\Elasticsearch\SearchAdapter\Query\Builder\Match as MatchQueryBuilder;
  14. use Magento\Elasticsearch\SearchAdapter\Filter\Builder as FilterBuilder;
  15. use Magento\Elasticsearch\Elasticsearch5\SearchAdapter\Mapper as Elasticsearch5Mapper;
  16. /**
  17. * Mapper class
  18. * @api
  19. * @since 100.1.0
  20. */
  21. class Mapper extends Elasticsearch5Mapper
  22. {
  23. /**
  24. * @param QueryBuilder $queryBuilder
  25. * @param MatchQueryBuilder $matchQueryBuilder
  26. * @param FilterBuilder $filterBuilder
  27. */
  28. public function __construct(
  29. QueryBuilder $queryBuilder,
  30. MatchQueryBuilder $matchQueryBuilder,
  31. FilterBuilder $filterBuilder
  32. ) {
  33. $this->queryBuilder = $queryBuilder;
  34. $this->matchQueryBuilder = $matchQueryBuilder;
  35. $this->filterBuilder = $filterBuilder;
  36. }
  37. /**
  38. * Build adapter dependent query
  39. *
  40. * @param RequestInterface $request
  41. * @return array
  42. * @since 100.1.0
  43. */
  44. public function buildQuery(RequestInterface $request)
  45. {
  46. $searchQuery = $this->queryBuilder->initQuery($request);
  47. $searchQuery['body']['query'] = array_merge(
  48. $searchQuery['body']['query'],
  49. $this->processQuery(
  50. $request->getQuery(),
  51. [],
  52. BoolQuery::QUERY_CONDITION_MUST
  53. )
  54. );
  55. $searchQuery['body']['query']['bool']['minimum_should_match'] = 1;
  56. $searchQuery = $this->queryBuilder->initAggregations($request, $searchQuery);
  57. return $searchQuery;
  58. }
  59. }