當前位置: 首頁>>代碼示例>>PHP>>正文


PHP Zend_Search_Lucene_Storage_File::lock方法代碼示例

本文整理匯總了PHP中Zend_Search_Lucene_Storage_File::lock方法的典型用法代碼示例。如果您正苦於以下問題:PHP Zend_Search_Lucene_Storage_File::lock方法的具體用法?PHP Zend_Search_Lucene_Storage_File::lock怎麽用?PHP Zend_Search_Lucene_Storage_File::lock使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在Zend_Search_Lucene_Storage_File的用法示例。


在下文中一共展示了Zend_Search_Lucene_Storage_File::lock方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的PHP代碼示例。

示例1: __construct

    /**
     * Opens the index.
     *
     * IndexReader constructor needs Directory as a parameter. It should be
     * a string with a path to the index folder or a Directory object.
     *
     * @param mixed $directory
     * @throws Zend_Search_Lucene_Exception
     */
    public function __construct($directory = null, $create = false)
    {
        if ($directory === null) {
            throw new Zend_Search_Exception('No index directory specified');
        }

        if ($directory instanceof Zend_Search_Lucene_Storage_Directory_Filesystem) {
            $this->_directory      = $directory;
            $this->_closeDirOnExit = false;
        } else {
            $this->_directory      = new Zend_Search_Lucene_Storage_Directory_Filesystem($directory);
            $this->_closeDirOnExit = true;
        }


        // Get a shared lock to the index
        $this->_lock = $this->_directory->createFile('index.lock');

        $this->_segmentInfos = array();

        if ($create) {
            // Throw an exception if index is under processing now
            if (!$this->_lock->lock(LOCK_EX, true)) {
                throw new Zend_Search_Lucene_Exception('Can\'t create index. It\'s under processing now');
            }

            // Writer will create segments file for empty segments list
            $this->_writer = new Zend_Search_Lucene_Index_Writer($this->_directory, $this->_segmentInfos, true);

            if (!$this->_lock->lock(LOCK_SH)) {
                throw new Zend_Search_Lucene_Exception('Can\'t reduce lock level from Exclusive to Shared');
            }
        } else {
            // Wait if index is under switching from one set of segments to another (Index_Writer::_updateSegments())
            if (!$this->_lock->lock(LOCK_SH)) {
                throw new Zend_Search_Lucene_Exception('Can\'t obtain shared index lock');
            }
            $this->_writer = null;
        }


        $segmentsFile = $this->_directory->getFileObject('segments');

        $format = $segmentsFile->readInt();

        if ($format != (int)0xFFFFFFFF) {
            throw new Zend_Search_Lucene_Exception('Wrong segments file format');
        }

        // read version
        // $segmentsFile->readLong();
        $segmentsFile->readInt(); $segmentsFile->readInt();

        // read segment name counter
        $segmentsFile->readInt();

        $segments = $segmentsFile->readInt();

        $this->_docCount = 0;

        // read segmentInfos
        for ($count = 0; $count < $segments; $count++) {
            $segName = $segmentsFile->readString();
            $segSize = $segmentsFile->readInt();
            $this->_docCount += $segSize;

            $this->_segmentInfos[] =
                                new Zend_Search_Lucene_Index_SegmentInfo($segName,
                                                                         $segSize,
                                                                         $this->_directory);
        }
    }
開發者ID:jorgenils,項目名稱:zend-framework,代碼行數:81,代碼來源:Lucene.php


注:本文中的Zend_Search_Lucene_Storage_File::lock方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。