コード例 #1
0
 /**
  * Generate compound index file
  */
 protected function _generateCFS()
 {
     $cfsFile = $this->_directory->createFile($this->_name . '.cfs');
     $cfsFile->writeVInt(count($this->_files));
     $dataOffsetPointers = array();
     foreach ($this->_files as $fileName) {
         $dataOffsetPointers[$fileName] = $cfsFile->tell();
         $cfsFile->writeLong(0);
         // write dummy data
         $cfsFile->writeString($fileName);
     }
     foreach ($this->_files as $fileName) {
         // Get actual data offset
         $dataOffset = $cfsFile->tell();
         // Seek to the data offset pointer
         $cfsFile->seek($dataOffsetPointers[$fileName]);
         // Write actual data offset value
         $cfsFile->writeLong($dataOffset);
         // Seek back to the end of file
         $cfsFile->seek($dataOffset);
         $dataFile = $this->_directory->getFileObject($fileName);
         $byteCount = $this->_directory->fileLength($fileName);
         while ($byteCount > 0) {
             $data = $dataFile->readBytes(min($byteCount, 131072));
             $byteCount -= strlen($data);
             $cfsFile->writeBytes($data);
         }
         $this->_directory->deleteFile($fileName);
     }
 }
コード例 #2
0
ファイル: SegmentInfo.php プロジェクト: avbrugen/uace-laravel
 /**
  * Load terms dictionary index
  *
  * @throws \ZendSearch\Lucene\Exception\ExceptionInterface
  */
 private function _loadDictionaryIndex()
 {
     // Check, if index is already serialized
     if ($this->_directory->fileExists($this->_name . '.sti')) {
         // Load serialized dictionary index data
         $stiFile = $this->_directory->getFileObject($this->_name . '.sti');
         $stiFileData = $stiFile->readBytes($this->_directory->fileLength($this->_name . '.sti'));
         // Load dictionary index data
         if (($unserializedData = @unserialize($stiFileData)) !== false) {
             list($this->_termDictionary, $this->_termDictionaryInfos) = $unserializedData;
             return;
         }
     }
     // Load data from .tii file and generate .sti file
     // Prefetch dictionary index data
     $tiiFile = $this->openCompoundFile('.tii');
     $tiiFileData = $tiiFile->readBytes($this->compoundFileLength('.tii'));
     // Load dictionary index data
     list($this->_termDictionary, $this->_termDictionaryInfos) = DictionaryLoader::load($tiiFileData);
     $stiFileData = serialize(array($this->_termDictionary, $this->_termDictionaryInfos));
     $stiFile = $this->_directory->createFile($this->_name . '.sti');
     $stiFile->writeBytes($stiFileData);
 }