コード例 #1
0
ファイル: CamelCaseTest.php プロジェクト: rjsmelo/tiki
 function testCamelCaseNotEnabled()
 {
     $index = new Search_Elastic_Index($this->connection, 'test_index');
     $index->destroy();
     $typeFactory = $index->getTypeFactory();
     $index->addDocument(['object_type' => $typeFactory->identifier('wiki page'), 'object_id' => $typeFactory->identifier('CamelCase Words'), 'title' => $typeFactory->plaintext('CamelCase Words')]);
     $query = new Search_Query();
     $query->filterContent('Camel AND Word', 'title');
     $this->assertEquals(0, count($query->search($index)));
 }
コード例 #2
0
ファイル: searchlib-unified.php プロジェクト: ameoba32/tiki
 /**
  * @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();
 }
コード例 #3
0
 /**
  * @param bool $loggit
  * @return array
  */
 function rebuild($loggit = false)
 {
     global $prefs;
     $errlib = TikiLib::lib('errorreport');
     switch ($prefs['unified_engine']) {
         case 'lucene':
             $index_location = $this->getIndexLocation();
             $tempName = $index_location . '-new';
             $swapName = $index_location . '-old';
             if ($this->rebuildInProgress()) {
                 $errlib->report(tr('Rebuild in progress.'));
                 return false;
             }
             $index = new Search_Index_Lucene($tempName);
             $unifiedsearchlib = $this;
             register_shutdown_function(function () use($tempName, $unifiedsearchlib) {
                 if (file_exists($tempName)) {
                     $unifiedsearchlib->destroyDirectory($tempName);
                     echo "Abnormal termination. Unless it was killed manually, it likely ran out of memory.\n";
                 }
             });
             break;
         case 'elastic':
             $connection = $this->getElasticConnection();
             $indexName = $prefs['unified_elastic_index_prefix'] . uniqid();
             $index = new Search_Elastic_Index($connection, $indexName);
             register_shutdown_function(function () use($indexName, $index) {
                 global $prefs;
                 if ($prefs['unified_elastic_index_current'] !== $indexName) {
                     $index->destroy();
                 }
             });
             break;
         default:
             die('Unsupported');
     }
     // Build in -new
     TikiLib::lib('queue')->clear(self::INCREMENT_QUEUE);
     $tikilib = TikiLib::lib('tiki');
     $access = TikiLib::lib('access');
     $access->preventRedirect(true);
     $index = new Search_Index_TypeAnalysisDecorator($index);
     $indexer = $this->buildIndexer($index, $loggit);
     $stat = $tikilib->allocate_extra('unified_rebuild', function () use($indexer) {
         return $indexer->rebuild();
     });
     $access->preventRedirect(false);
     $tikilib->set_preference('unified_identifier_fields', $index->getIdentifierFields());
     // Force destruction to clear locks
     unset($indexer);
     unset($index);
     switch ($prefs['unified_engine']) {
         case 'lucene':
             // Current to -old
             if (file_exists($index_location)) {
                 if (!rename($index_location, $swapName)) {
                     $errlib->report(tr('Could not remove active index. Likely a file permission issue.'));
                 }
             }
             // -new to current
             if (!rename($tempName, $index_location)) {
                 $errlib->report(tr('Could not transfer new index to active. Likely a file permission issue.'));
             }
             // Destroy old
             $this->destroyDirectory($swapName);
             if (file_exists($swapName)) {
                 $errlib->report(tr('Failed to destroy the old index. Likely a file permission issue.'));
             }
             break;
         case 'elastic':
             // Obtain the old index and destroy it after permanently replacing it.
             $oldIndex = $this->getIndex();
             $tikilib->set_preference('unified_elastic_index_current', $indexName);
             if ($oldIndex) {
                 $oldIndex->destroy();
             }
             break;
     }
     // Process the documents updated while we were processing the update
     $this->processUpdateQueue(1000);
     $tikilib->set_preference('unified_last_rebuild', $tikilib->now);
     return $stat;
 }