protected function processQuery(RequestQueryInterface $query, DataObject $params, $conditionType) { switch ($query->getType()) { case RequestQueryInterface::TYPE_MATCH: $this->processMatchQuery($query, $params, $conditionType); break; case RequestQueryInterface::TYPE_BOOL: $this->processBoolQuery($query, $params, $conditionType); break; case RequestQueryInterface::TYPE_FILTER: $this->processFilterQuery($query, $params, $conditionType); break; } }
/** * @param RequestQueryInterface $query * @return FilterInterface[] */ private function getFilters($query) { $filters = []; switch ($query->getType()) { case RequestQueryInterface::TYPE_BOOL: /** @var \Magento\Framework\Search\Request\Query\BoolExpression $query */ foreach ($query->getMust() as $subQuery) { $filters = array_merge($filters, $this->getFilters($subQuery)); } foreach ($query->getShould() as $subQuery) { $filters = array_merge($filters, $this->getFilters($subQuery)); } foreach ($query->getMustNot() as $subQuery) { $filters = array_merge($filters, $this->getFilters($subQuery)); } break; case RequestQueryInterface::TYPE_FILTER: /** @var Filter $query */ $filter = $query->getReference(); if (FilterInterface::TYPE_BOOL === $filter->getType()) { $filters = array_merge($filters, $this->getFiltersFromBoolFilter($filter)); } else { $filters[] = $filter; } break; default: break; } return $filters; }
/** * Process query * * @param ScoreBuilder $scoreBuilder * @param RequestQueryInterface $query * @param Select $select * @param string $conditionType * @param QueryContainer $queryContainer * @return Select * @throws \InvalidArgumentException */ protected function processQuery( ScoreBuilder $scoreBuilder, RequestQueryInterface $query, Select $select, $conditionType, QueryContainer $queryContainer ) { switch ($query->getType()) { case RequestQueryInterface::TYPE_MATCH: /** @var MatchQuery $query */ $select = $queryContainer->addMatchQuery( $select, $query, $conditionType ); break; case RequestQueryInterface::TYPE_BOOL: /** @var BoolQuery $query */ $select = $this->processBoolQuery($scoreBuilder, $query, $select, $queryContainer); break; case RequestQueryInterface::TYPE_FILTER: /** @var FilterQuery $query */ $select = $this->processFilterQuery($scoreBuilder, $query, $select, $conditionType, $queryContainer); break; default: throw new \InvalidArgumentException(sprintf('Unknown query type \'%s\'', $query->getType())); } return $select; }
/** * @param QueryInterface $query * @return bool */ private function hasFilters(QueryInterface $query) { $hasFilters = false; switch ($query->getType()) { case RequestQueryInterface::TYPE_BOOL: /** @var \Magento\Framework\Search\Request\Query\Bool $query */ foreach ($query->getMust() as $subQuery) { $hasFilters |= $this->hasFilters($subQuery); } foreach ($query->getShould() as $subQuery) { $hasFilters |= $this->hasFilters($subQuery); } foreach ($query->getMustNot() as $subQuery) { $hasFilters |= $this->hasFilters($subQuery); } break; case RequestQueryInterface::TYPE_FILTER: $hasFilters |= true; break; default: $hasFilters |= false; break; } return $hasFilters; }
/** * Process query * * @param ScoreBuilder $scoreBuilder * @param RequestQueryInterface $query * @param Select $select * @param bool $isNot * @return Select * @throws \InvalidArgumentException */ protected function processQuery(ScoreBuilder $scoreBuilder, RequestQueryInterface $query, Select $select, $isNot) { switch ($query->getType()) { case RequestQueryInterface::TYPE_MATCH: /** @var MatchQuery $query */ $scoreBuilder->startQuery(); $select = $this->matchQueryBuilder->build($scoreBuilder, $select, $query, $isNot); $scoreBuilder->endQuery($query->getBoost()); break; case RequestQueryInterface::TYPE_BOOL: /** @var BoolQuery $query */ $select = $this->processBoolQuery($scoreBuilder, $query, $select); break; case RequestQueryInterface::TYPE_FILTER: /** @var FilterQuery $query */ $select = $this->processFilterQuery($scoreBuilder, $query, $select, $isNot); break; default: throw new \InvalidArgumentException(sprintf('Unknown query type \'%s\'', $query->getType())); } return $select; }
/** * Process query * * @param ScoreBuilder $scoreBuilder * @param RequestQueryInterface $query * @param Select $select * @param string $conditionType * @param QueryContainer $queryContainer * @return Select * @throws \InvalidArgumentException */ protected function processQuery(ScoreBuilder $scoreBuilder, RequestQueryInterface $query, Select $select, $conditionType, QueryContainer $queryContainer) { switch ($query->getType()) { case RequestQueryInterface::TYPE_BOOL: /** @var BoolQuery $query */ $select = $this->processBoolQuery($scoreBuilder, $query, $select, $queryContainer); break; case RequestQueryInterface::TYPE_FILTER: /** @var FilterQuery $query */ $select = $this->processFilterQuery($scoreBuilder, $query, $select, $conditionType, $queryContainer); break; } return $select; }
/** * @param RequestQueryInterface $query * @param SphinxQL $select * @param string $conditionType * @param QueryContainer $queryContainer * @return SphinxQL */ protected function processQuery(RequestQueryInterface $query, SphinxQL $select, $conditionType, QueryContainer $queryContainer) { switch ($query->getType()) { case RequestQueryInterface::TYPE_MATCH: $select = $queryContainer->addMatchQuery($select, $query, $conditionType); break; case RequestQueryInterface::TYPE_BOOL: $select = $this->processBoolQuery($query, $select, $queryContainer); break; } return $select; }