コード例 #1
0
    public function testMerge()
    {
        $segmentsDirectory = new Zend_Search_Lucene_Storage_Directory_Filesystem(dirname(__FILE__) . '/_files/_source');
        $outputDirectory   = new Zend_Search_Lucene_Storage_Directory_Filesystem(dirname(__FILE__) . '/_files');
        $segmentsList = array('_0', '_1', '_2', '_3', '_4');

        $segmentMerger = new Zend_Search_Lucene_Index_SegmentMerger($outputDirectory, 'mergedSegment');

        foreach ($segmentsList as $segmentName) {
            $segmentMerger->addSource(new Zend_Search_Lucene_Index_SegmentInfo($segmentName, 2, $segmentsDirectory));
        }

        $mergedSegment = $segmentMerger->merge();
        $this->assertTrue($mergedSegment instanceof Zend_Search_Lucene_Index_SegmentInfo);
        unset($mergedSegment);

        $mergedFile = $outputDirectory->getFileObject('mergedSegment.cfs');
        $mergedFileData = $mergedFile->readBytes($outputDirectory->fileLength('mergedSegment.cfs'));

        $sampleFile = $outputDirectory->getFileObject('mergedSegment.cfs.sample');
        $sampleFileData = $sampleFile->readBytes($outputDirectory->fileLength('mergedSegment.cfs.sample'));

        $this->assertEquals($mergedFileData, $sampleFileData);

        $outputDirectory->deleteFile('mergedSegment.cfs');
    }
コード例 #2
0
ファイル: Writer.php プロジェクト: Sywooch/forums
 /**
  * Merge specified segments
  *
  * $segments is an array of SegmentInfo objects
  *
  * @param array $segments
  */
 private function _mergeSegments($segments)
 {
     $newName = $this->_newSegmentName();
     /** Zend_Search_Lucene_Index_SegmentMerger */
     require_once 'Zend/Search/Lucene/Index/SegmentMerger.php';
     $merger = new Zend_Search_Lucene_Index_SegmentMerger($this->_directory, $newName);
     foreach ($segments as $segmentInfo) {
         $merger->addSource($segmentInfo);
         $this->_segmentsToDelete[$segmentInfo->getName()] = $segmentInfo->getName();
     }
     $newSegment = $merger->merge();
     if ($newSegment !== null) {
         $this->_newSegments[$newSegment->getName()] = $newSegment;
     }
     $this->commit();
 }
コード例 #3
0
ファイル: Writer.php プロジェクト: jorgenils/zend-framework
 /**
  * Merge specified segments
  *
  * $segments is an array of SegmentInfo objects
  *
  * @param array $segments
  */
 private function _mergeSegments($segments)
 {
     // Try to get exclusive non-blocking lock to the 'index.optimization.lock'
     // Skip optimization if it's performed by other process right now
     $optimizationLock = $this->_directory->createFile('index.optimization.lock');
     if (!$optimizationLock->lock(LOCK_EX, true)) {
         return;
     }
     $newName = $this->_newSegmentName();
     $merger = new Zend_Search_Lucene_Index_SegmentMerger($this->_directory, $newName);
     foreach ($segments as $segmentInfo) {
         $merger->addSource($segmentInfo);
         $this->_segmentsToDelete[$segmentInfo->getName()] = $segmentInfo->getName();
     }
     $newSegment = $merger->merge();
     if ($newSegment !== null) {
         $this->_newSegments[$newSegment->getName()] = $newSegment;
     }
     $this->commit();
     // optimization is finished
     $optimizationLock->unlock();
 }