/** * Perform a search and return record collection. * * @param AbstractQuery $query Search query * @param integer $offset Search offset * @param integer $limit Search limit * @param ParamBag $params Search backend parameters * * @return RecordCollectionInterface */ public function search(AbstractQuery $query, $offset, $limit, ParamBag $params = null) { //it was necessary to overwrite this function // before Refactoring of Spellchecking //I will leave it because it might be possible // that we need our own backend later return parent::search($query, $offset, $limit, $params); }
/** * Returns browser usage statistics * * @param bool $version Include the version numbers in the list * @param int $listLength How many items to return * * @return array */ public function getBrowserStats($version, $listLength = 5) { $query = new Query('*:*'); $params = new ParamBag(); $params->add('fl', 'browser,browserVersion'); $params->add('group', 'true'); $params->add('group.field', 'session'); $start = 0; $limit = 1000; $hashes = []; do { $response = $this->solrBackend->search($query, $start, $limit, $params); $groups = $response->getGroups(); foreach ($groups['session']['groups'] as $group) { if ($version) { // Version specific $browser = $group['doclist']['docs'][0]['browser'] . ' ' . $group['doclist']['docs'][0]['browserVersion']; if (isset($hashes[$browser])) { $hashes[$browser]++; } elseif (count($hashes) < $limit) { $hashes[$browser] = 1; } } else { // Browser name if (isset($hashes[$group['doclist']['docs'][0]['browser']])) { $hashes[$group['doclist']['docs'][0]['browser']]++; } elseif (count($hashes) < $limit) { $hashes[$group['doclist']['docs'][0]['browser']] = 1; } } } $start += $limit; } while (count($groups['session']['groups']) > 0); $solrBrowsers = []; foreach ($hashes as $browser => $count) { $newBrowser = ['browserName' => $browser, 'count' => $count]; // Insert sort (limit to listLength) for ($i = 0; $i < $listLength - 1 && $i < count($solrBrowsers); $i++) { if ($count > $solrBrowsers[$i]['count']) { // Insert in order array_splice($solrBrowsers, $i, 0, [$newBrowser]); continue 2; // Skip the append after this loop } } if (count($solrBrowsers) < $listLength) { $solrBrowsers[] = $newBrowser; } } return $solrBrowsers; }
/** * Create the SOLR backend. * * @param Connector $connector Connector * * @return Backend */ protected function createBackend(Connector $connector) { $backend = new Backend($connector); $backend->setQueryBuilder($this->createQueryBuilder()); if ($this->logger) { $backend->setLogger($this->logger); } return $backend; }
/** * Create the SOLR backend. * * @param Connector $connector Connector * * @return Backend */ protected function createBackend(Connector $connector) { //we can't use zje original funtion because Backend is overwritten // by Swissbib $backend = new Backend($connector); $backend->setQueryBuilder($this->createQueryBuilder()); if ($this->logger) { $backend->setLogger($this->logger); } $manager = $this->serviceLocator->get('VuFind\\RecordDriverPluginManager'); $factory = new RecordCollectionFactory([$manager, 'getSolrRecord']); $backend->setRecordCollectionFactory($factory); return $backend; }
/** * Support method to run a "refine exception" test. * * @param string $msg Error message * * @return void */ protected function runRefineExceptionCall($msg) { $conn = $this->getConnectorMock(['query']); $e = new RemoteErrorException($msg, 400, new \Zend\Http\Response()); $conn->expects($this->once())->method('query')->with($this->equalTo('browse'))->will($this->throwException($e)); $back = new Backend($conn); $back->alphabeticBrowse('foo', 'bar', 1); }
/** * Create the SOLR backend. * * @param Connector $connector Connector * * @return Backend */ protected function createBackend(Connector $connector) { //return parent::createBackend($connector); //we can't use zje original funtion because Backend is overwritten by Swissbib //look at it later if really necessary //$config = $this->config->get('config'); $backend = new Backend($connector); $backend->setQueryBuilder($this->createQueryBuilder()); // Spellcheck //if (isset($config->Spelling->enabled) && $config->Spelling->enabled) { // if (isset($config->Spelling->simple) && $config->Spelling->simple) { // $dictionaries = array('basicSpell'); // } else { // $dictionaries = array('default', 'basicSpell'); // } // $backend->setDictionaries($dictionaries); //} if ($this->logger) { $backend->setLogger($this->logger); } $manager = $this->serviceLocator->get('VuFind\\RecordDriverPluginManager'); $factory = new RecordCollectionFactory(array($manager, 'getSolrRecord')); $backend->setRecordCollectionFactory($factory); return $backend; }
/** * Retrieve a batch of IDs using regular search. * * @param Backend $backend Search backend * @param int $offset Number of terms previously retrieved * * @return array */ protected function getIdsFromBackendUsingSearch(Backend $backend, $offset) { $connector = $backend->getConnector(); $key = $connector->getUniqueKey(); $params = new ParamBag(['q' => '*:*', 'fl' => $key, 'rows' => $this->countPerPage, 'start' => $offset, 'wt' => 'json', 'sort' => $key . ' asc']); $raw = $connector->search($params); $result = json_decode($raw); $ids = []; if (isset($result->response->docs)) { foreach ($result->response->docs as $doc) { $ids[] = $doc->{$key}; } } return $ids; }