/** * Starts a autocomplete search * @param string $sSearchString Reference to given search string * @param boolean $vNsSearch bool always false * @return array Array of Apache_Solr_Documents */ private static function searchAutocomplete(&$sSearchString, &$vNsSearch) { $oSerachService = SearchService::getInstance(); $oSearchRequest = new SearchRequest(); $oSearchRequest->init(); $oSearchOptions = new SearchOptions($oSearchRequest, RequestContext::getMain()); $oSearchOptions->readInSearchRequest(); $sSearchString = urldecode($sSearchString); $sSolrSearchString = self::preprocessSearchInput($sSearchString); $aQuery = $oSearchOptions->getSolrAutocompleteQuery($sSearchString, $sSolrSearchString); try { $oHits = $oSerachService->search($aQuery['searchString'], $aQuery['offset'], $aQuery['searchLimit'], $aQuery['searchOptions']); } catch (Exception $e) { return ''; } $oDocuments = $oHits->response->docs; if ($aQuery['namespace'] !== false) { $vNsSearch = $aQuery['namespace']; } $bEscalateToFuzzy = $oHits->response->numFound == 0; // boolean! // Escalate to fuzzy if ($bEscalateToFuzzy) { $oSearchOptions->setOption('scope', 'title'); $aFuzzyQuery = $oSearchOptions->getSolrFuzzyQuery($sSolrSearchString); $aFuzzyQuery['searchLimit'] = BsConfig::get('MW::ExtendedSearch::AcEntries'); $aFuzzyQuery['searchOptions']['facet'] = 'off'; $aFuzzyQuery['searchOptions']['hl'] = 'off'; try { $oHits = $oSerachService->search($aFuzzyQuery['searchString'], $aFuzzyQuery['offset'], $aFuzzyQuery['searchLimit'], $aFuzzyQuery['searchOptions']); } catch (Exception $e) { return ''; } $oDocuments = $oHits->response->docs; } return $oDocuments; }