/** * 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; }