示例#1
0
 /**
  * Execute search and hydrate results if required.
  *
  * @param integer $hydrationMode
  * @throws DoctrineSearchException
  * @return mixed
  */
 public function getResult($hydrationMode = null)
 {
     if ($hydrationMode) {
         $this->hydrationMode = $hydrationMode;
     }
     $classes = array();
     foreach ($this->entityClasses as $entityClass) {
         $classes[] = $this->sm->getClassMetadata($entityClass);
     }
     $resultSet = $this->getSearchManager()->getClient()->search($this->query, $classes);
     // TODO: abstraction of support for different result sets
     if ($resultSet instanceof Elastica\ResultSet) {
         $this->count = $resultSet->getTotalHits();
         $this->facets = $resultSet->getFacets();
         $results = $resultSet->getResults();
     } else {
         $resultClass = get_class($resultSet);
         throw new DoctrineSearchException("Unexpected result set class '{$resultClass}'");
     }
     // If having the hydration query set, hydrate using the hydrate query
     if ($this->getHydrationQuery()) {
         // Document ids are used to lookup dbms results
         $fn = function ($result) {
             return $result->getId();
         };
         $ids = array_map($fn, $results);
         return $this->getHydrationQuery()->setParameter($this->hydrationParameter, $ids ?: null)->useResultCache($this->useResultCache, $this->cacheLifetime)->getResult($this->hydrationMode);
     }
     // Return results depending on hydration mode
     switch ($this->hydrationMode) {
         case self::HYDRATE_BYPASS:
             return $resultSet;
         case self::HYDRATE_AGGREGATION:
             return $resultSet->getAggregations();
     }
     return $this->sm->getUnitOfWork()->hydrateCollection($classes, $resultSet);
 }
 /**
  * Execute a direct search query on the associated index and type
  *
  * @param object $query
  * @return array|\Doctrine\Common\Collections\ArrayCollection|ElasticsearchEntityCollection
  */
 public function search($query)
 {
     $classes = $this->getClassMetadata();
     return $this->_sm->getUnitOfWork()->loadCollection($classes, $query);
 }
 /**
  * Execute a direct search query on the associated index and type
  *
  * @param object $query
  */
 public function search($query)
 {
     return $this->_sm->getUnitOfWork()->loadCollection(array($this->_class), $query);
 }