Exemple #1
0
 /**
  * Do the actual search
  * 
  * @param string|Query $search					search object or string
  * @param int $start							[optional] starting record number
  * @param int $max								[optional] max records
  * @param string $sort							[optional] sort order
  * @param bool $include_facets					[optional] whether to include facets or not
  * 
  * @return string
  */
 protected function doSearch($search, $start, $max = 10, $sort = null, $include_facets = true)
 {
     // start
     if ($start > 0) {
         $start--;
         // solr is 0-based
     }
     ### parse the query
     $query = "";
     // passed in a query object, so handle this
     if ($search instanceof Search\Query) {
         $query = $search->toQuery();
     } else {
         $query = "&q=" . urlencode($search);
     }
     ### now the url
     $this->url = $this->server . $query;
     $this->url .= "&start={$start}&rows=" . $max . "&sort=" . urlencode($sort);
     if ($include_facets == true) {
         $this->url .= "&facet=true&facet.mincount=1";
         foreach ($this->config->getFacets() as $facet => $attributes) {
             $sort = (string) $attributes["sort"];
             $max = (string) $attributes["max"];
             $this->url .= "&facet.field={$facet}";
             if ($sort != "") {
                 $this->url .= "&f.{$facet}.facet.sort={$sort}";
             }
             if ($max != "") {
                 $this->url .= "&f.{$facet}.facet.limit={$max}";
             }
         }
     }
     // make sure we get the score
     $this->url .= "&fl=*+score";
     ## get and parse the response
     // get the data
     $client = Factory::getHttpClient();
     $client->setUri($this->url);
     $response = $client->send()->getBody();
     $xml = simplexml_load_string($response);
     if ($response == null || $xml === false) {
         throw new \Exception("Could not connect to search engine.");
     }
     // parse the results
     $results = new Search\ResultSet($this->config);
     // extract total
     $results->total = (int) $xml->result["numFound"];
     // extract records
     foreach ($this->extractRecords($xml) as $record) {
         $results->addRecord($record);
     }
     // extract facets
     $results->setFacets($this->extractFacets($xml));
     return $results;
 }
 public function getNewTitles($max = 10)
 {
     $query = new Query(null, $this->getConfig());
     $query->addTerm(1, null, '*', null, '*');
     $query->sort = 'id desc';
     $query->max = $max;
     $results = $this->doSearch($query);
     foreach ($results->getRecords() as $record) {
         $record->includeOriginalRecord();
     }
     return $results;
 }