/**
  * Converts query to array.
  *
  * @see \Elastica\Query\AbstractQuery::toArray()
  *
  * @return array Query array
  */
 public function toArray()
 {
     $array = parent::toArray();
     if (isset($array['script'])) {
         $array['script'] = $array['script']['script'];
     }
     return $array;
 }
Exemple #2
0
 /**
  * Sets nested query
  *
  * @param  \Elastica\Query\AbstractQuery $query
  * @return \Elastica\Filter\Nested
  */
 public function setQuery(AbstractQuery $query)
 {
     return $this->setParam('query', $query->toArray());
 }
 /**
  *
  * @param AbstractQuery $query        	
  * @param boolean $lazy        	
  * @param boolean $silent        	
  *
  * @return array $results
  */
 protected function runQuery($query, $lazy = false, $silent = false)
 {
     $results = ['results' => [], 'total' => 0];
     try {
         $request = $this->getServiceLocator()->get('Request');
         $debug = $request->getQuery('debug');
         if ($debug) {
             echo "<script>console.log('" . addSlashes(json_encode($query->toArray())) . "');</script>\n";
         }
         $client = $this->getElasticaClient();
         $response = $client->request('reports/lead/_search?query_cache=true', Request::GET, $query->toArray());
         if ($response && $response->isOk()) {
             $objRepository = $this->getObjectManager()->getRepository("Lead\\Entity\\Lead");
             $data = $response->getData();
             if ($data && isset($data['hits']['hits'])) {
                 $hits = $data['hits']['hits'];
                 $max_score = $data['hits']['max_score'] ?: 1;
                 $results['total'] = $data['hits']['total'];
                 foreach ($hits as $hit) {
                     $_score = isset($hit['_score']) ? $hit['_score'] : 1;
                     $score = round($_score / $max_score * 100);
                     $result = new Result($this->getServiceLocator());
                     $result->setScore($score);
                     if ($lazy) {
                         $lead = new Lead();
                         $lead->setId($hit['_id']);
                         $lead->setProxy(true);
                     } else {
                         $lead = $objRepository->findOneBy(['id' => $hit['_id']]);
                     }
                     if ($lead && $lead instanceof Lead) {
                         $result->setLead($lead);
                         $results['results'][] = $result;
                     }
                 }
             }
         }
     } catch (\Exception $e) {
         if (!$silent) {
             $this->getFlashMessenger()->addErrorMessage($e->getMessage());
         }
     }
     return $results;
 }
 /**
  * Get query text.
  *
  * @return string
  */
 public function getText()
 {
     return $this->query->getText();
 }