protected function initLuceneEngine() { $this->load->library('zend', 'Zend/Search/Lucene'); $this->load->library('zend'); $this->zend->load('Zend/Search/Lucene'); Zend_Search_Lucene::setDefaultSearchField('content'); }
public static function indexationSearch($searchParams) { Zend_Search_Lucene::setDefaultSearchField('contents'); $directory = Zend_Registry::get('lucene_index'); $index = new Zend_Search_Lucene($directory); $words = strtolower(Cible_FunctionsGeneral::removeAccents(Cible_FunctionsGeneral::html2text(utf8_decode($searchParams['words'])))); $wordsArray = explode(' ', $words); if (count($wordsArray) > 1) { $query = new Zend_Search_Lucene_Search_Query_Phrase($wordsArray); } else { if (strlen($words) >= 3) { $pattern = new Zend_Search_Lucene_Index_Term("{$words}*"); $query = new Zend_Search_Lucene_Search_Query_Wildcard($pattern); } else { $term = new Zend_Search_Lucene_Index_Term($words); $query = new Zend_Search_Lucene_Search_Query_Term($term); } } $hits = $index->find($query); //echo($query); $i = 0; $result = array(); foreach ($hits as $hit) { $result[$i]['moduleID'] = $hit->moduleID; $result[$i]['pageID'] = $hit->pageID; $result[$i]['contentID'] = $hit->contentID; $result[$i]['languageID'] = $hit->languageID; $result[$i]['title'] = $hit->title; $result[$i]['text'] = $hit->text; $result[$i]['link'] = $hit->link; $i++; } return $result; }
public function testDefaultSearchField() { $currentDefaultSearchField = Zend_Search_Lucene::getDefaultSearchField(); $this->assertEquals($currentDefaultSearchField, null); Zend_Search_Lucene::setDefaultSearchField('anotherField'); $this->assertEquals(Zend_Search_Lucene::getDefaultSearchField(), 'anotherField'); Zend_Search_Lucene::setDefaultSearchField($currentDefaultSearchField); }
public function searchTag($tag, $value) { if (!$this->_enabled) { return array(); } Zend_Search_Lucene::setDefaultSearchField($tag); $query = Zend_Search_Lucene_Search_QueryParser::parse($value); return $this->_index->find($query); }
/** * Set default search field. * * Null means, that search is performed through all fields by default * * Default value is null * * @param string $fieldName */ public static function setDefaultSearchField($fieldName) { Zend_Search_Lucene::setDefaultSearchField($fieldName); }
public function testQueryHit() { // Restore default search field if it wasn't done by previous test because of failure Zend_Search_Lucene::setDefaultSearchField(null); $index = Zend_Search_Lucene::open(dirname(__FILE__) . '/_index23Sample/_files'); $hits = $index->find('submitting AND wishlists'); $hit = $hits[0]; $this->assertTrue($hit instanceof Zend_Search_Lucene_Search_QueryHit); $this->assertTrue($hit->getIndex() instanceof Zend_Search_Lucene_Interface); $doc = $hit->getDocument(); $this->assertTrue($doc instanceof Zend_Search_Lucene_Document); $this->assertEquals($doc->path, 'IndexSource/contributing.html'); }
public function testDefaultSearchField() { $index = Zend_Search_Lucene::open(dirname(__FILE__) . '/_files/_indexSample'); $storedDefaultSearchField = Zend_Search_Lucene::getDefaultSearchField(); Zend_Search_Lucene::setDefaultSearchField('path'); $hits = $index->find('contributing'); $this->assertEquals(count($hits), 5); $expectedResultset = array(array(8, 0.847922, 'IndexSource/contributing.html'), array(0, 0.678337, 'IndexSource/contributing.documentation.html'), array(1, 0.678337, 'IndexSource/contributing.wishlist.html'), array(2, 0.678337, 'IndexSource/contributing.patches.html'), array(7, 0.678337, 'IndexSource/contributing.bugs.html')); foreach ($hits as $resId => $hit) { $this->assertEquals($hit->id, $expectedResultset[$resId][0]); $this->assertTrue( abs($hit->score - $expectedResultset[$resId][1]) < 0.000001 ); $this->assertEquals($hit->path, $expectedResultset[$resId][2]); } Zend_Search_Lucene::setDefaultSearchField($storedDefaultSearchField); }
public function findAction() { $queryFromRequest = $this->cleanRequestString($_REQUEST["query"]); $categoryFromRequest = $this->cleanRequestString($_REQUEST["cat"]); $searcher = new SearchPhp_Frontend_Searcher(); $this->view->groupByCategory = $this->_getParam("groupByCategory"); $this->view->omitSearchForm = $this->_getParam("omitSearchForm"); $this->view->categoryOrder = $this->_getParam("categoryOrder"); $this->view->omitJsIncludes = $this->_getParam("omitJsIncludes"); $perPage = $this->_getParam("perPage"); if (empty($perPage)) { $perPage = 10; } $page = $this->_getParam("page"); if (empty($page)) { $page = 1; } $queryStr = strtolower($queryFromRequest); $this->view->category = $categoryFromRequest; if (!empty($this->view->category)) { $category = $this->view->category; } else { $category = null; } $pluginConf = SearchPhp_Plugin::getSearchConfigArray(); if (!empty($pluginConf["search"]["frontend"]["categories"])) { $this->view->availableCategories = explode(",", $pluginConf["search"]["frontend"]["categories"]); } $doFuzzy = $this->_getParam("fuzzy"); try { $query = new Zend_Search_Lucene_Search_Query_Boolean(); $field = $this->_getParam("field"); if (!empty($field)) { Zend_Search_Lucene::setDefaultSearchField($field); } $searchResults = array(); if (!empty($queryStr)) { if ($doFuzzy) { $queryStr = str_replace(" ", "~ ", $queryStr); $queryStr .= "~"; Zend_Search_Lucene_Search_Query_Fuzzy::setDefaultPrefixLength(3); } $userQuery = Zend_Search_Lucene_Search_QueryParser::parse($queryStr, 'utf-8'); $query->addSubquery($userQuery, true); if (!empty($this->searchLanguage)) { if (is_object($this->searchLanguage)) { $lang = $this->searchLanguage->toString(); } else { $lang = $this->searchLanguage; } $lang = str_replace(array("_", "-"), "", $lang); $languageTerm = new Zend_Search_Lucene_Index_Term($lang, 'lang'); $languageQuery = new Zend_Search_Lucene_Search_Query_Term($languageTerm); $query->addSubquery($languageQuery, true); } if (!empty($category)) { $categoryTerm = new Zend_Search_Lucene_Index_Term($category, 'cat'); $categoryQuery = new Zend_Search_Lucene_Search_Query_Term($categoryTerm); $query->addSubquery($categoryQuery, true); } $hits = $this->frontendIndex->find($query); $validHits = array(); if ($this->ownHostOnly and $hits != null) { //get rid of hits from other hosts $currenthost = $_SERVER['HTTP_HOST']; for ($i = 0; $i < count($hits); $i++) { $url = $hits[$i]->getDocument()->getField("url"); if (strpos($url->value, "http://" . $currenthost) !== FALSE || strpos($url->value, "https://" . $currenthost) !== FALSE) { $validHits[] = $hits[$i]; } } } else { $validHits = $hits; } $start = $perPage * ($page - 1); $end = $start + ($perPage - 1); if ($end > count($validHits) - 1) { $end = count($validHits) - 1; } for ($i = $start; $i <= $end; $i++) { $hit = $validHits[$i]; $url = $hit->getDocument()->getField("url"); $title = $hit->getDocument()->getField("title"); $searchResult['boost'] = $hit->getDocument()->boost; $searchResult['title'] = $title->value; $searchResult['url'] = $url->value; $searchResult['sumary'] = $searcher->getSumaryForUrl($url->value, $queryStr); try { if ($hit->getDocument()->getField("h1")) { $searchResult['h1'] = $hit->getDocument()->getField("h1")->value; } } catch (Zend_Search_Lucene_Exception $e) { } foreach ($this->categories as $category) { try { $searchResult['categories'][] = $hit->getDocument()->getField("cat")->value; } catch (Zend_Search_Lucene_Exception $e) { } } $searchResults[] = $searchResult; unset($searchResult); } } if (count($validHits) < 1) { $this->view->pages = 0; } else { $this->view->pages = ceil(count($validHits) / $perPage); } $this->view->perPage = $perPage; $this->view->page = $page; $this->view->total = count($validHits); $this->view->query = $queryStr; $this->view->searchResults = $searchResults; if ($this->fuzzySearch) { //look for similar search terms if (!empty($queryStr) and (empty($searchResults) or count($searchResults) < 1)) { $terms = SearchPhp_Plugin::fuzzyFindTerms($queryStr, $this->frontendIndex, 3); if (empty($terms) or count($terms) < 1) { $terms = SearchPhp_Plugin::fuzzyFindTerms($queryStr, $this->frontendIndex, 0); } $suggestions = array(); if (is_array($terms)) { $counter = 0; foreach ($terms as $term) { $t = $term->text; //check if term can be found for current language if ($this->searchLanguage != null) { if (is_object($this->searchLanguage)) { $language = $this->searchLanguage->toString(); } else { $language = $this->searchLanguage; } $language = str_replace(array("_", "-"), "", $language); } $hits = null; $query = new Zend_Search_Lucene_Search_Query_Boolean(); if ($language != null) { $languageTerm = new Zend_Search_Lucene_Index_Term($language, 'lang'); $languageQuery = new Zend_Search_Lucene_Search_Query_Term($languageTerm); $query->addSubquery($languageQuery, true); } if (!empty($category)) { $categoryTerm = new Zend_Search_Lucene_Index_Term($category, 'cat'); $categoryQuery = new Zend_Search_Lucene_Search_Query_Term($categoryTerm); $query->addSubquery($categoryQuery, true); } $userQuery = Zend_Search_Lucene_Search_QueryParser::parse($t, 'utf-8'); $query->addSubquery($userQuery, true); $hits = $this->frontendIndex->find($query); $validHits = array(); if ($this->ownHostOnly and $hits != null) { //get rid of hits from other hosts $currenthost = $_SERVER['HTTP_HOST']; if (count($hits) == 1) { $url = $hits[0]->getDocument()->getField("url"); if (strpos($url->value, "http://" . $currenthost) !== FALSE || strpos($url->value, "https://" . $currenthost) !== FALSE) { $validHits[] = $hits[0]; } } for ($i = 0; $i < count($hits); $i++) { $url = $hits[$i]->getDocument()->getField("url"); if (strpos($url->value, "http://" . $currenthost) !== FALSE) { $validHits[] = $hits[$i]; } } } else { $validHits = $hits; } if (count($validHits) > 0 and !in_array($t, $suggestions)) { $suggestions[] = $t; if ($counter >= 20) { break; } $counter++; } } } $this->view->suggestions = $suggestions; } } } catch (Exception $e) { Logger::log("An Exception occured during search:", Zend_Log::ERR); Logger::log($e, Zend_Log::ERR); $this->view->searchResults = array(); } if ($this->_getParam("viewscript")) { $this->renderScript($this->_getParam("viewscript")); } }
} date_default_timezone_set(require Environment::expand('%timezoneFile%')); // debugging Debug::enable(NULL, BASE_DIR . '/error.log', Environment::expand('%adminEmail%')); // paths Environment::setVariable('themeDir', Environment::expand('%baseDir%/themes')); Environment::setVariable('templatesDir', Environment::expand('%themeDir%/%theme%')); Environment::setVariable('tempDir', Environment::expand('%baseDir%/tmp')); Environment::setVariable('themeBaseUri', Environment::expand('%baseUri%/themes/%theme%')); Environment::setVariable('mediaDir', Environment::expand('%baseDir%/media')); Environment::setVariable('mediaBaseUri', Environment::expand('%baseUri%/media')); set_include_path(LIB_DIR . PATH_SEPARATOR . get_include_path()); Html::$xhtml = FALSE; SafeStream::register(); setlocale(LC_ALL, require Environment::expand('%localeFile%')); Zend_Search_Lucene::setDefaultSearchField('description'); // configure locale require_once LIB_DIR . '/tr.php'; $available = array(); foreach (glob(APP_DIR . '/locale/' . '*.php') as $_) { $available[substr(substr($_, strlen(APP_DIR . '/locale/')), 0, 2)] = $_; } tr::$locale = Environment::getHttpRequest()->detectLanguage(array_keys($available)); if (tr::$locale) { list(tr::$plurals[tr::$locale], tr::$table[tr::$locale]) = (require $available[tr::$locale]); } // connect to DB dibi::connect(require Environment::expand('%dbFile%')); // get app $app = Environment::getApplication(); // routing
public function findAction() { $this->disableViewAutoRender(); $searcher = new Searcher(); try { $query = new \Zend_Search_Lucene_Search_Query_Boolean(); $field = $this->getParam('field'); if (!empty($field)) { \Zend_Search_Lucene::setDefaultSearchField($field); } $searchResults = array(); $validHits = array(); if (!empty($this->query)) { if ($this->fuzzySearch) { $this->query = str_replace(' ', '~ ', $this->query); $this->query .= '~'; \Zend_Search_Lucene_Search_Query_Fuzzy::setDefaultPrefixLength(3); } $userQuery = \Zend_Search_Lucene_Search_QueryParser::parse($this->query, 'utf-8'); $query->addSubquery($userQuery, TRUE); $this->addLanguageQuery($query); $this->addCountryQuery($query); $this->addCategoryQuery($query); $this->addRestrictionQuery($query); $validHits = $this->getValidHits($this->frontendIndex->find($query)); $start = $this->perPage * ($this->currentPage - 1); $end = $start + ($this->perPage - 1); if ($end > count($validHits) - 1) { $end = count($validHits) - 1; } for ($i = $start; $i <= $end; $i++) { $hit = $validHits[$i]; /** @var \Zend_Search_Lucene_Document $doc */ $doc = $hit->getDocument(); $url = $doc->getField('url'); $title = $doc->getField('title'); $content = $doc->getField('content'); $searchResult['boost'] = $doc->boost; $searchResult['title'] = $title->value; $searchResult['url'] = $url->value; $searchResult['summary'] = $searcher->getSummaryForUrl($content->value, $this->untouchedQuery); //H1, description and imageTags are not available in pdf files. try { if ($doc->getField('h1')) { $searchResult['h1'] = $doc->getField('h1')->value; } if ($doc->getField('description')) { $searchResult['description'] = $searcher->getSummaryForUrl($doc->getField('description')->value, $this->untouchedQuery); } if ($doc->getField('imageTags')) { $searchResult['imageTags'] = $doc->getField('imageTags')->value; } } catch (\Zend_Search_Lucene_Exception $e) { } foreach ($this->categories as $category) { try { $searchResult['categories'][] = $hit->getDocument()->getField('cat')->value; } catch (\Zend_Search_Lucene_Exception $e) { } } $searchResults[] = $searchResult; unset($searchResult); } } $suggestions = FALSE; if ($this->fuzzySearch) { $suggestions = $this->getFuzzySuggestions($searchResults); } $currentPageResultStart = $this->perPage * ($this->currentPage - 1); $currentPageResultEnd = $currentPageResultStart + $this->perPage; if ($currentPageResultEnd > count($validHits)) { $currentPageResultEnd = count($validHits); } $pages = 0; if (count($validHits) > 0) { $pages = ceil(count($validHits) / $this->perPage); } $this->view->assign(['searchCurrentPage' => $this->currentPage, 'searchAllPages' => $pages, 'searchCategory' => $this->category, 'searchAvailableCategories' => $this->categories, 'searchSuggestions' => $suggestions, 'searchLanguage' => $this->searchLanguage, 'searchCountry' => $this->searchCountry, 'searchPerPage' => $this->perPage, 'searchTotalHits' => count($validHits), 'searchQuery' => $this->untouchedQuery, 'searchHasResults' => count($searchResults) > 0, 'searchResults' => $searchResults, 'searchCurrentPageResultStart' => $currentPageResultStart + 1, 'searchCurrentPageResultEnd' => $currentPageResultEnd]); } catch (\Exception $e) { \Pimcore\Logger::debug('An Exception occurred during search: ' . $e->getMessage()); $this->view->assign(['searchResults' => [], 'searchHasResults' => FALSE]); } if ($this->getParam('viewScript')) { $this->renderScript($this->_getParam('viewScript')); } else { $this->renderScript('/search/find.php'); } }