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