Example #1
0
 function find(Search_Query_Interface $query, $resultStart, $resultCount)
 {
     $builder = new Search_Elastic_QueryBuilder();
     $queryPart = $builder->build($query->getExpr());
     $builder = new Search_Elastic_OrderBuilder();
     $orderPart = $builder->build($query->getSortOrder());
     $builder = new Search_Elastic_FacetBuilder();
     $facetPart = $builder->build($query->getFacets());
     $fullQuery = array_merge($queryPart, $orderPart, $facetPart, array("from" => $resultStart, "size" => $resultCount, "highlight" => array("fields" => array('contents' => array("number_of_fragments" => 5)))));
     $result = $this->connection->search($this->index, $fullQuery, $resultStart, $resultCount);
     $hits = $result->hits;
     $entries = array_map(function ($entry) {
         $data = (array) $entry->_source;
         if (isset($entry->highlight->contents)) {
             $data['_highlight'] = implode('...', $entry->highlight->contents);
         } else {
             $data['_highlight'] = '';
         }
         return $data;
     }, $hits->hits);
     $resultSet = new Search_Elastic_ResultSet($entries, $hits->total, $resultStart, $resultCount);
     $reader = new Search_Elastic_FacetReader($result);
     foreach ($query->getFacets() as $facet) {
         if ($filter = $reader->getFacetFilter($facet)) {
             $resultSet->addFacetFilter($filter);
         }
     }
     return $resultSet;
 }
Example #2
0
 function scroll(Search_Query_Interface $query)
 {
     $builder = new Search_Elastic_OrderBuilder();
     $orderPart = $builder->build($query->getSortOrder());
     $builder = new Search_Elastic_QueryBuilder();
     $builder->setDocumentReader($this->createDocumentReader());
     $queryPart = $builder->build($query->getExpr());
     $indices = [$this->index];
     $fullQuery = array_merge($queryPart, $orderPart, array("size" => 100, "highlight" => array("fields" => array('contents' => array("number_of_fragments" => 5), 'file' => array("number_of_fragments" => 5)))));
     $args = ['scroll' => '5m'];
     $result = $this->connection->search($indices, $fullQuery, $args);
     $scrollId = $result->_scroll_id;
     do {
         foreach ($result->hits->hits as $entry) {
             (yield (array) $entry->_source);
         }
         $result = $this->connection->scroll($scrollId, $args);
     } while (count($result->hits->hits) > 0);
 }