Example #1
0
 /**
  * @return Search_Index_Interface
  */
 function getIndex($indexType = 'data')
 {
     global $prefs, $tiki_p_admin;
     $writeMode = false;
     if ($indexType == 'data-write') {
         $indexType = 'data';
         $writeMode = true;
     }
     switch ($prefs['unified_engine']) {
         case 'lucene':
             Zend_Search_Lucene::setTermsPerQueryLimit($prefs['unified_lucene_terms_limit']);
             $index = new Search_Lucene_Index($this->getIndexLocation($indexType), $prefs['language'], $prefs['unified_lucene_highlight'] == 'y');
             $index->setCache(TikiLib::lib('cache'));
             $index->setMaxResults($prefs['unified_lucene_max_result']);
             $index->setResultSetLimit($prefs['unified_lucene_max_resultset_limit']);
             return $index;
         case 'elastic':
             $index = $this->getIndexLocation($indexType);
             if (empty($index)) {
                 break;
             }
             $connection = $this->getElasticConnection($writeMode);
             $index = new Search_Elastic_Index($connection, $index);
             $index->setCamelCaseEnabled($prefs['unified_elastic_camel_case'] == 'y');
             $index->setFacetCount($prefs['search_facet_default_amount']);
             return $index;
         case 'mysql':
             $index = $this->getIndexLocation($indexType);
             if (empty($index)) {
                 break;
             }
             $index = new Search_MySql_Index(TikiDb::get(), $index);
             return $index;
     }
     // Do nothing, provide a fake index.
     $errlib = TikiLib::lib('errorreport');
     if ($tiki_p_admin != 'y') {
         $errlib->report(tr('Contact the site administrator. The index needs rebuilding.'));
     } else {
         $errlib->report('<a title="' . tr("Rebuild Search index") . '" href="tiki-admin.php?page=search&rebuild=now">' . tr("Click here to rebuild index") . '</a>');
     }
     return new Search_Index_Memory();
 }
Example #2
0
 /**
  * @return Search_Index_Lucene
  */
 function getIndex()
 {
     global $prefs;
     switch ($prefs['unified_engine']) {
         case 'lucene':
             Zend_Search_Lucene::setTermsPerQueryLimit($prefs['unified_lucene_terms_limit']);
             $index = new Search_Index_Lucene($this->getIndexLocation(), $prefs['language'], $prefs['unified_lucene_highlight'] == 'y');
             $index->setCache(TikiLib::lib('cache'));
             $index->setMaxResults($prefs['unified_lucene_max_result']);
             $index->setResultSetLimit($prefs['unified_lucene_max_resultset_limit']);
             return $index;
         case 'elastic':
             if (empty($prefs['unified_elastic_index_current'])) {
                 return null;
             }
             $connection = $this->getElasticConnection();
             $index = new Search_Elastic_Index($connection, $prefs['unified_elastic_index_current']);
             return $index;
     }
 }
 /**
  * Instanciate the Lucene index
  * 
  * The index will be created if it doesn't exist yet.
  * 
  * @return \Zend_Search_Lucene_Interface							Lucene index instance
  * @throws Exception											If the index cannot be created
  */
 protected function _index()
 {
     // One-time instanciation or creation of the lucene index
     if ($this->_index === null) {
         // Try to instanciate an existing lucene index
         try {
             $this->_index = \Zend_Search_Lucene::open($this->_indexDirectory);
             // If an error occurs ...
         } catch (\Zend_Search_Lucene_Exception $e) {
             // Try to create a new lucene index ...
             try {
                 $this->_index = \Zend_Search_Lucene::create($this->_indexDirectory);
                 // If an error occurs: Failure
             } catch (\Zend_Search_Lucene_Exception $e) {
                 throw new Exception(sprintf('Error creating lucene index in "%1$s", reason: "%2$s"', $this->_indexDirectory, $e->getMessage()));
             }
         }
         // Index setup
         \Zend_Search_Lucene_Storage_Directory_Filesystem::setDefaultFilePermissions(0664);
         \Zend_Search_Lucene_Analysis_Analyzer::setDefault(new \Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive());
         \Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('UTF-8');
         // Minimize memory consumption
         $this->_index->setMaxBufferedDocs(1);
         // Set optimization frequency
         $this->_index->setMergeFactor(max(1, intval($GLOBALS['TYPO3_CONF_VARS']['EXT']['extParams']['tw_lucenesearch']['mergeFactor'])));
         // If applicable: Optimize index
         if ($this->_indexOptimize) {
             $this->_index->optimize();
         }
         $this->_index->commit();
         if (TYPO3_MODE == 'FE') {
             \Zend_Search_Lucene::setTermsPerQueryLimit(\Tollwerk\TwLucenesearch\Utility\Indexer::indexConfig($GLOBALS['TSFE'], 'search.limits.query'));
         }
     }
     return $this->_index;
 }
Example #4
0
 /**
  *
  * @throws nc_search_exception
  */
 protected function open_index()
 {
     $path = $this->get_index_path();
     try {
         if ($this->index_exists($path)) {
             $this->index = Zend_Search_Lucene::open($path);
         } else {
             $this->index = Zend_Search_Lucene::create($path);
         }
     } catch (Zend_Search_Lucene_Exception $e) {
         throw new nc_search_exception("Cannot open Lucene index: {$e->getMessage()}");
     }
     $this->is_opened = true;
     // apply settings to the index
     Zend_Search_Lucene::setResultSetLimit($this->get_setting('ZendSearchLucene_ResultSetLimit'));
     Zend_Search_Lucene::setTermsPerQueryLimit($this->get_setting('MaxTermsPerQuery'));
     $settings = array('MaxBufferedDocs', 'MaxMergeDocs', 'MergeFactor');
     foreach ($settings as $s) {
         $setter = "set{$s}";
         $this->index->{$setter}($this->get_setting("ZendSearchLucene_{$s}"));
     }
     // set analyzer
     Zend_Search_Lucene_Analysis_Analyzer::setDefault(new nc_search_provider_zend_analyzer());
     // set fuzzy prefix length so fuzzy searches will match a wider array of possibilities
     Zend_Search_Lucene_Search_Query_Fuzzy::setDefaultPrefixLength(0);
     // set wildcard prefix length so wildcards will match a wider array of possibilities
     Zend_Search_Lucene_Search_Query_Wildcard::setMinPrefixLength(0);
     /**
      * @todo set default search fields
      */
 }
 function getIndex()
 {
     global $prefs;
     if ($prefs['unified_engine'] == 'lucene') {
         Zend_Search_Lucene::setTermsPerQueryLimit($prefs['unified_lucene_terms_limit']);
         $index = new Search_Index_Lucene($this->getIndexLocation(), $prefs['language'], $prefs['unified_lucene_highlight'] == 'y');
         $index->setCache(TikiLib::lib('cache'));
         $index->setMaxResults($prefs['unified_lucene_max_result']);
         $index->setResultSetLimit($prefs['unified_lucene_max_resultset_limit']);
         return $index;
     }
 }