/** * Compile the Elasticsearch query. * * @return string The Elasticsearch query. */ public function compileQuery() { if ($this->_parts['fields']) { $this->_elasticQuery->setSource($this->_parts['fields']); } if (isset($this->_parts['limit'])) { $this->_elasticQuery->setSize($this->_parts['limit']); } if (isset($this->_parts['offset'])) { $this->_elasticQuery->setFrom($this->_parts['offset']); } if ($this->_parts['order']) { $this->_elasticQuery->setSort($this->_parts['order']); } if ($this->_parts['aggregations']) { foreach ($this->_parts['aggregations'] as $aggregation) { $this->_elasticQuery->addAggregation($aggregation); } } $filteredQuery = new FilteredQuery(); if ($this->_parts['query'] !== null) { $filteredQuery->setQuery($this->_parts['query']); $this->_elasticQuery->setQuery($filteredQuery); } if ($this->_parts['preFilter'] !== null) { $filteredQuery->setFilter($this->_parts['preFilter']); $this->_elasticQuery->setQuery($filteredQuery); } if ($this->_parts['postFilter'] !== null) { $this->_elasticQuery->setPostFilter($this->_parts['postFilter']); } return $this->_elasticQuery; }
/** * @param $searchTerm * @param $taxon * @param $boolFilter * @param $elasticaQuery */ public function applyElasticaQueryType($searchTerm, $taxon, $boolFilter, $elasticaQuery) { if (!$searchTerm) { $query = new Filtered(); $taxonFromRequestFilter = new FilterTerms(); $taxonFromRequestFilter->setTerms('taxons', [$taxon]); $boolFilter->addMust($taxonFromRequestFilter); $query->setFilter($boolFilter); $elasticaQuery->setQuery($query); } else { if ('all' !== $taxon) { $query = new Filtered(); $query->setQuery(new QueryString($searchTerm)); $taxonFromRequestFilter = new FilterTerms(); $taxonFromRequestFilter->setTerms('taxons', [$taxon]); $boolFilter->addMust($taxonFromRequestFilter); $query->setFilter($boolFilter); } else { $query = new QueryString($searchTerm); } $elasticaQuery->setQuery($query); } }