Exemple #1
0
 /**
  * @see FacetInterface::getFacet
  */
 public function getFacet($fieldName, \Elastica\Filter\AbstractFilter $mainFilter)
 {
     $mainFilter = $this->prepareMainFilter($mainFilter, $fieldName);
     $facet = new \Elastica\Facet\Range($fieldName);
     $facet->setField($fieldName)->setRanges($this->getRangeDefinitions())->setFilter($mainFilter);
     return $facet;
 }
Exemple #2
0
 /**
  * @param string $q
  * @param array $params
  * @return array
  */
 protected function _getAllFacets($q, array $params)
 {
     $facets = array();
     $hasStats = isset($params['stats']) && isset($params['stats']['fields']) && !empty($params['stats']['fields']);
     if ($hasStats) {
         foreach ($params['stats']['fields'] as $field) {
             $facet = new \Elastica\Facet\Statistical($field);
             $facet->setParam('field', $field);
             $facets[] = $facet;
         }
     }
     if (isset($params['facets']) && !empty($params['facets'])) {
         $properties = $this->_getIndexProperties();
         $filters = isset($params['filters']) ? $params['filters'] : array();
         foreach ($params['facets'] as $field => $conds) {
             $queryFilter = null;
             if (array_key_exists($field, $filters)) {
                 $_params = $params;
                 #AM unset comment out for ATM (Custom Code). Need to test for other clients
                 //  unset($_params['filters'][$field]);
                 $queryFilter = new \Elastica\Filter\Query($this->_getFilteredQuery($q, $_params));
             }
             if (null === $conds) {
                 // Terms Facet
                 if (!$hasStats && array_key_exists($field, $properties)) {
                     $facet = new \Elastica\Facet\Terms($field);
                     if ($properties[$field]['type'] == 'multi_field') {
                         $field .= '.untouched';
                     }
                     $facet->setField($field)->setAllTerms(true)->setSize($this->getFacetsMaxSize());
                     if ($queryFilter) {
                         $facet->setGlobal()->setFilter($queryFilter);
                     }
                     $facets[] = $facet;
                 }
             } elseif (is_array($conds)) {
                 if (isset($conds[0]['from']) && isset($conds[0]['to'])) {
                     if (!$hasStats) {
                         // Range Facet
                         $facet = new \Elastica\Facet\Range($field);
                         $facet->setField($field)->setRanges($this->_helper->_prepareRanges($conds));
                         $facets[] = $facet;
                     }
                 } else {
                     foreach ($conds as $cond) {
                         // Query Facet
                         $query = $this->_helper->_prepareQuery($field, $cond);
                         $facet = new \Elastica\Facet\Query($query);
                         $facet->setQuery(new \Elastica\Query\QueryString($query));
                         if ($queryFilter) {
                             $facet->setGlobal()->setFilter($queryFilter);
                         }
                         $facets[] = $facet;
                     }
                 }
             }
         }
     }
     return $facets;
 }