/**
  * 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;
 }
Esempio n. 2
0
 /**
  * @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);
     }
 }