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');
 }
Example #2
0
 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;
 }
Example #3
0
 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);
 }
Example #4
0
 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);
 }
Example #5
0
 /**
  * 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);
 }
Example #6
0
 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');
 }
Example #7
0
    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"));
     }
 }
Example #9
0
}
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');
     }
 }