コード例 #1
0
 /**
  * Generate compound index file
  */
 private 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);
         $cfsFile->writeBytes($dataFile->readBytes($this->_directory->fileLength($fileName)));
         $this->_directory->deleteFile($fileName);
     }
 }
コード例 #2
0
ファイル: Writer.php プロジェクト: jorgenils/zend-framework
 /**
  * Opens the index for writing
  *
  * IndexWriter constructor needs Directory as a parameter. It should be
  * a string with a path to the index folder or a Directory object.
  * Second constructor parameter create is optional - true to create the
  * index or overwrite the existing one.
  *
  * @param ZSearchDirectory $directory
  * @param boolean $create
  */
 public function __construct(ZSearchDirectory $directory, $create = false)
 {
     $this->_directory = $directory;
     if ($create) {
         foreach ($this->_directory->fileList() as $file) {
             if ($file == 'deletable' || $file == 'segments' || substr($file, strlen($file) - 4) == '.cfs') {
                 $this->_directory->deleteFile($file);
             }
         }
         $segmentsFile = $this->_directory->createFile('segments');
         $segmentsFile->writeInt((int) 0xffffffff);
         // write version
         $segmentsFile->writeLong(0);
         // write name counter
         $segmentsFile->writeInt(0);
         // write segment counter
         $segmentsFile->writeInt(0);
         $deletableFile = $this->_directory->createFile('deletable');
         // write counter
         $deletableFile->writeInt(0);
         $this->_version = 0;
         $this->_segmentNameCounter = 0;
         $this->_segments = 0;
     } else {
         $segmentsFile = $this->_directory->getFileObject('segments');
         $format = $segmentsFile->readInt();
         if ($format != (int) 0xffffffff) {
             throw new Zend_Search_Lucene_Exception('Wrong segments file format');
         }
         // read version
         $this->_version = $segmentsFile->readLong();
         // read counter
         $this->_segmentNameCounter = $segmentsFile->readInt();
         // read segment counter
         $this->_segments = $segmentsFile->readInt();
     }
     $this->_newSegments = array();
     $this->_currentSegment = null;
 }