当前位置: 首页>>代码示例>>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;未经允许,请勿转载。