/** * Perform search */ protected function performSearch() { global $ilUser, $ilBench; unset($_SESSION['vis_references']); $filter_query = ''; if ($this->search_cache->getItemFilter() and ilSearchSettings::getInstance()->isLuceneItemFilterEnabled()) { $filter_settings = ilSearchSettings::getInstance()->getEnabledLuceneItemFilterDefinitions(); foreach ((array) $this->search_cache->getItemFilter() as $obj => $value) { if (!$filter_query) { $filter_query .= '+( '; } else { $filter_query .= 'OR'; } $filter_query .= ' ' . (string) $filter_settings[$obj]['filter'] . ' '; } $filter_query .= ') '; } // begin-patch mime_filter $mime_query = ''; if ($this->search_cache->getMimeFilter() and ilSearchSettings::getInstance()->isLuceneMimeFilterEnabled()) { $filter_settings = ilSearchSettings::getInstance()->getEnabledLuceneMimeFilterDefinitions(); foreach ($this->search_cache->getMimeFilter() as $mime => $value) { if (!$mime_query) { $mime_query .= '+( '; } else { $mime_query .= 'OR'; } $mime_query .= ' ' . (string) $filter_settings[$mime]['filter'] . ' '; } $mime_query .= ') '; } $filter_query = $filter_query . ' ' . $mime_query; include_once './Services/Search/classes/Lucene/class.ilLuceneSearcher.php'; include_once './Services/Search/classes/Lucene/class.ilLuceneQueryParser.php'; $qp = new ilLuceneQueryParser($filter_query . ' +(' . $this->search_cache->getQuery() . ')'); $qp->parse(); $searcher = ilLuceneSearcher::getInstance($qp); $searcher->search(); // Filter results include_once './Services/Search/classes/Lucene/class.ilLuceneSearchResultFilter.php'; include_once './Services/Search/classes/Lucene/class.ilLucenePathFilter.php'; $filter = ilLuceneSearchResultFilter::getInstance($ilUser->getId()); $filter->addFilter(new ilLucenePathFilter($this->search_cache->getRoot())); $filter->setCandidates($searcher->getResult()); $filter->filter(); if ($filter->getResultObjIds()) { $searcher->highlight($filter->getResultObjIds()); } // Show results $this->showSearchForm(); include_once './Services/Search/classes/class.ilSearchResultPresentation.php'; $presentation = new ilSearchResultPresentation($this); $presentation->setResults($filter->getResultIds()); $presentation->setSearcher($searcher); // TODO: other handling required $ilBench->start('Lucene', '1500_fo'); $this->addPager($filter, 'max_page'); $ilBench->stop('Lucene', '1500_fo'); $presentation->setPreviousNext($this->prev_link, $this->next_link); if ($presentation->render()) { $this->tpl->setVariable('SEARCH_RESULTS', $presentation->getHTML(true)); } else { ilUtil::sendInfo(sprintf($this->lng->txt('search_no_match_hint'), $this->search_cache->getQuery())); } }
function showSavedResults() { global $ilUser; // Read old result sets include_once 'Services/Search/classes/class.ilSearchResult.php'; $this->initSearchType(self::TYPE_LOM); $result_obj = new ilSearchResult($ilUser->getId()); $result_obj->read(ADVANCED_SEARCH); $this->showSearch(); // Show them if (count($result_obj->getResults())) { $this->addPager($result_obj, 'adv_max_page'); include_once './Services/Search/classes/class.ilSearchResultPresentation.php'; $presentation = new ilSearchResultPresentation($this, ilSearchResultPresentation::MODE_STANDARD); $presentation->setResults($result_obj->getResultsForPresentation()); $presentation->setPreviousNext($this->prev_link, $this->next_link); if ($presentation->render()) { $this->tpl->setVariable('RESULTS', $presentation->getHTML(true)); } } return true; }
/** * Perform search */ function performSearch() { global $ilUser; if (!isset($_GET['page_number']) and $this->search_mode != 'in_results') { unset($_SESSION['max_page']); $this->search_cache->deleteCachedEntries(); } if ($this->getType() == ilSearchBaseGUI::SEARCH_DETAILS and !$this->getDetails()) { ilUtil::sendInfo($this->lng->txt('search_choose_object_type')); $this->showSearch(); return false; } // Step 1: parse query string if (!is_object($query_parser =& $this->__parseQueryString())) { ilUtil::sendInfo($query_parser); $this->showSearch(); return false; } // Step 2: perform object search. Get an ObjectSearch object via factory. Depends on fulltext or like search type. $result =& $this->__searchObjects($query_parser); // Step 3: perform meta keyword search. Get an MetaDataSearch object. $result_meta =& $this->__searchMeta($query_parser, 'keyword'); $result->mergeEntries($result_meta); $result_meta =& $this->__searchMeta($query_parser, 'contribute'); $result->mergeEntries($result_meta); $result_meta =& $this->__searchMeta($query_parser, 'title'); $result->mergeEntries($result_meta); $result_meta =& $this->__searchMeta($query_parser, 'description'); $result->mergeEntries($result_meta); // Perform details search in object specific tables if ($this->getType() == ilSearchBaseGUI::SEARCH_DETAILS) { $result = $this->__performDetailsSearch($query_parser, $result); } // Step 5: Search in results if ($this->search_mode == 'in_results') { include_once 'Services/Search/classes/class.ilSearchResult.php'; $old_result_obj = new ilSearchResult($ilUser->getId()); $old_result_obj->read(); $result->diffEntriesFromResult($old_result_obj); } // Step 4: merge and validate results $result->filter($this->getRootNode(), $query_parser->getCombination() == 'and'); $result->save(); $this->showSearch(); if (!count($result->getResults())) { ilUtil::sendInfo($this->lng->txt('search_no_match')); } if ($result->isLimitReached()) { #$message = sprintf($this->lng->txt('search_limit_reached'),$this->settings->getMaxHits()); #ilUtil::sendInfo($message); } // Step 6: show results $this->addPager($result, 'max_page'); include_once './Services/Search/classes/class.ilSearchResultPresentation.php'; $presentation = new ilSearchResultPresentation($this, ilSearchResultPresentation::MODE_STANDARD); $presentation->setResults($result->getResultsForPresentation()); $presentation->setSubitemIds($result->getSubitemIds()); $presentation->setPreviousNext($this->prev_link, $this->next_link); if ($presentation->render()) { // $this->tpl->setVariable('SEARCH_RESULTS',$presentation->getHTML()); $this->tpl->setVariable('RESULTS_TABLE', $presentation->getHTML(true)); } return true; }
/** * Perform search */ protected function performSearch() { global $ilUser, $ilBench; unset($_SESSION['vis_references']); include_once './Services/Search/classes/Lucene/class.ilLuceneSearcher.php'; include_once './Services/Search/classes/Lucene/class.ilLuceneAdvancedQueryParser.php'; $qp = new ilLuceneAdvancedQueryParser($this->search_cache->getQuery()); $qp->parse(); if (!strlen(trim($qp->getQuery()))) { ilUtil::sendInfo($this->lng->txt('msg_no_search_string')); $this->showSavedResults(); return false; } $searcher = ilLuceneSearcher::getInstance($qp); $searcher->search(); // Filter results $ilBench->start('Lucene', 'ResultFilter'); include_once './Services/Search/classes/Lucene/class.ilLuceneSearchResultFilter.php'; include_once './Services/Search/classes/Lucene/class.ilLucenePathFilter.php'; $filter = ilLuceneSearchResultFilter::getInstance($ilUser->getId()); $filter->addFilter(new ilLucenePathFilter($this->search_cache->getRoot())); $filter->setCandidates($searcher->getResult()); $filter->filter(); $ilBench->stop('Lucene', 'ResultFilter'); if ($filter->getResultObjIds()) { $searcher->highlight($filter->getResultObjIds()); } // Show results $this->tpl->addBlockFile('ADM_CONTENT', 'adm_content', 'tpl.lucene_adv_search.html', 'Services/Search'); include_once './Services/Search/classes/class.ilSearchResultPresentation.php'; $presentation = new ilSearchResultPresentation($this); $presentation->setResults($filter->getResultIds()); $presentation->setSearcher($searcher); // TODO: other handling required $ilBench->start('Lucene', '1500_fo'); $this->addPager($filter, 'max_page'); $ilBench->stop('Lucene', '1500_fo'); $presentation->setPreviousNext($this->prev_link, $this->next_link); if ($presentation->render()) { $this->tpl->setVariable('SEARCH_RESULTS', $presentation->getHTML(true)); } else { ilUtil::sendInfo($this->lng->txt('search_no_match')); } // and finally add search form $this->initFormSearch(); $this->tpl->setVariable('SEARCH_TABLE', $this->form->getHTML()); if ($filter->getResultIds()) { $this->fillAdminPanel(); } }