⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queryparser.php

📁 很棒的在线教学系统
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php/** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category   Zend * @package    Zend_Search_Lucene * @subpackage Search * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License *//** Zend_Search_Lucene_Index_Term */require_once "{$CFG->dirroot}/search/Zend/Search/Lucene/Index/Term.php";/** Zend_Search_Lucene_Search_Query_Term */require_once "{$CFG->dirroot}/search/Zend/Search/Lucene/Search/Query/Term.php";/** Zend_Search_Lucene_Search_Query_MultiTerm */require_once "{$CFG->dirroot}/search/Zend/Search/Lucene/Search/Query/MultiTerm.php";/** Zend_Search_Lucene_Search_Query_Boolean */require_once "{$CFG->dirroot}/search/Zend/Search/Lucene/Search/Query/Boolean.php";/** Zend_Search_Lucene_Search_Query_Phrase */require_once "{$CFG->dirroot}/search/Zend/Search/Lucene/Search/Query/Phrase.php";/** Zend_Search_Lucene_Search_Query_Wildcard */require_once "{$CFG->dirroot}/search/Zend/Search/Lucene/Search/Query/Wildcard.php";/** Zend_Search_Lucene_Search_Query_Range */require_once "{$CFG->dirroot}/search/Zend/Search/Lucene/Search/Query/Range.php";/** Zend_Search_Lucene_Search_Query_Fuzzy */require_once "{$CFG->dirroot}/search/Zend/Search/Lucene/Search/Query/Fuzzy.php";/** Zend_Search_Lucene_Search_Query_Empty */require_once "{$CFG->dirroot}/search/Zend/Search/Lucene/Search/Query/Empty.php";/** Zend_Search_Lucene_Search_Query_Insignificant */require_once "{$CFG->dirroot}/search/Zend/Search/Lucene/Search/Query/Insignificant.php";/** Zend_Search_Lucene_Search_QueryLexer */require_once "{$CFG->dirroot}/search/Zend/Search/Lucene/Search/QueryLexer.php";/** Zend_Search_Lucene_Search_QueryParserContext */require_once "{$CFG->dirroot}/search/Zend/Search/Lucene/Search/QueryParserContext.php";/** Zend_Search_Lucene_FSM */require_once "{$CFG->dirroot}/search/Zend/Search/Lucene/FSM.php";/** Zend_Search_Lucene_Exception */require_once "{$CFG->dirroot}/search/Zend/Search/Lucene/Exception.php";/** Zend_Search_Lucene_Search_QueryParserException */require_once "{$CFG->dirroot}/search/Zend/Search/Lucene/Search/QueryParserException.php";/** * @category   Zend * @package    Zend_Search_Lucene * @subpackage Search * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License */class Zend_Search_Lucene_Search_QueryParser extends Zend_Search_Lucene_FSM{    /**     * Parser instance     *     * @var Zend_Search_Lucene_Search_QueryParser     */    private static $_instance = null;    /**     * Query lexer     *     * @var Zend_Search_Lucene_Search_QueryLexer     */    private $_lexer;    /**     * Tokens list     * Array of Zend_Search_Lucene_Search_QueryToken objects     *     * @var array     */    private $_tokens;    /**     * Current token     *     * @var integer|string     */    private $_currentToken;    /**     * Last token     *     * It can be processed within FSM states, but this addirional state simplifies FSM     *     * @var Zend_Search_Lucene_Search_QueryToken     */    private $_lastToken = null;    /**     * Range query first term     *     * @var string     */    private $_rqFirstTerm = null;    /**     * Current query parser context     *     * @var Zend_Search_Lucene_Search_QueryParserContext     */    private $_context;    /**     * Context stack     *     * @var array     */    private $_contextStack;    /**     * Query string encoding     *     * @var string     */    private $_encoding;    /**     * Query string default encoding     *     * @var string     */    private $_defaultEncoding = '';    /**     * Defines query parsing mode.     *      * If this option is turned on, then query parser suppress query parser exceptions     * and constructs multi-term query using all words from a query.     *      * That helps to avoid exceptions caused by queries, which don't conform to query language,     * but limits possibilities to check, that query entered by user has some inconsistencies.     *      *      * Default is true.     *      * Use {@link Zend_Search_Lucene::suppressQueryParsingExceptions()},     * {@link Zend_Search_Lucene::dontSuppressQueryParsingExceptions()} and     * {@link Zend_Search_Lucene::checkQueryParsingExceptionsSuppressMode()} to operate     * with this setting.     *      * @var boolean     */    private $_suppressQueryParsingExceptions = true;    /**     * Boolean operators constants     */    const B_OR  = 0;    const B_AND = 1;    /**     * Default boolean queries operator     *     * @var integer     */    private $_defaultOperator = self::B_OR;    /** Query parser State Machine states */    const ST_COMMON_QUERY_ELEMENT       = 0;   // Terms, phrases, operators    const ST_CLOSEDINT_RQ_START         = 1;   // Range query start (closed interval) - '['    const ST_CLOSEDINT_RQ_FIRST_TERM    = 2;   // First term in '[term1 to term2]' construction    const ST_CLOSEDINT_RQ_TO_TERM       = 3;   // 'TO' lexeme in '[term1 to term2]' construction    const ST_CLOSEDINT_RQ_LAST_TERM     = 4;   // Second term in '[term1 to term2]' construction    const ST_CLOSEDINT_RQ_END           = 5;   // Range query end (closed interval) - ']'    const ST_OPENEDINT_RQ_START         = 6;   // Range query start (opened interval) - '{'    const ST_OPENEDINT_RQ_FIRST_TERM    = 7;   // First term in '{term1 to term2}' construction    const ST_OPENEDINT_RQ_TO_TERM       = 8;   // 'TO' lexeme in '{term1 to term2}' construction    const ST_OPENEDINT_RQ_LAST_TERM     = 9;   // Second term in '{term1 to term2}' construction    const ST_OPENEDINT_RQ_END           = 10;  // Range query end (opened interval) - '}'    /**     * Parser constructor     */    public function __construct()    {        parent::__construct(array(self::ST_COMMON_QUERY_ELEMENT,                                  self::ST_CLOSEDINT_RQ_START,                                  self::ST_CLOSEDINT_RQ_FIRST_TERM,                                  self::ST_CLOSEDINT_RQ_TO_TERM,                                  self::ST_CLOSEDINT_RQ_LAST_TERM,                                  self::ST_CLOSEDINT_RQ_END,                                  self::ST_OPENEDINT_RQ_START,                                  self::ST_OPENEDINT_RQ_FIRST_TERM,                                  self::ST_OPENEDINT_RQ_TO_TERM,                                  self::ST_OPENEDINT_RQ_LAST_TERM,                                  self::ST_OPENEDINT_RQ_END                                 ),                            Zend_Search_Lucene_Search_QueryToken::getTypes());        $this->addRules(             array(array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_WORD,             self::ST_COMMON_QUERY_ELEMENT),                   array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_PHRASE,           self::ST_COMMON_QUERY_ELEMENT),                   array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_FIELD,            self::ST_COMMON_QUERY_ELEMENT),                   array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_REQUIRED,         self::ST_COMMON_QUERY_ELEMENT),                   array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_PROHIBITED,       self::ST_COMMON_QUERY_ELEMENT),                   array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_FUZZY_PROX_MARK,  self::ST_COMMON_QUERY_ELEMENT),                   array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_BOOSTING_MARK,    self::ST_COMMON_QUERY_ELEMENT),                   array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_RANGE_INCL_START, self::ST_CLOSEDINT_RQ_START),                   array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_RANGE_EXCL_START, self::ST_OPENEDINT_RQ_START),                   array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_SUBQUERY_START,   self::ST_COMMON_QUERY_ELEMENT),                   array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_SUBQUERY_END,     self::ST_COMMON_QUERY_ELEMENT),                   array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_AND_LEXEME,       self::ST_COMMON_QUERY_ELEMENT),                   array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_OR_LEXEME,        self::ST_COMMON_QUERY_ELEMENT),                   array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_NOT_LEXEME,       self::ST_COMMON_QUERY_ELEMENT),                   array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_NUMBER,           self::ST_COMMON_QUERY_ELEMENT)                  ));        $this->addRules(             array(array(self::ST_CLOSEDINT_RQ_START,      Zend_Search_Lucene_Search_QueryToken::TT_WORD,           self::ST_CLOSEDINT_RQ_FIRST_TERM),                   array(self::ST_CLOSEDINT_RQ_FIRST_TERM, Zend_Search_Lucene_Search_QueryToken::TT_TO_LEXEME,      self::ST_CLOSEDINT_RQ_TO_TERM),                   array(self::ST_CLOSEDINT_RQ_TO_TERM,    Zend_Search_Lucene_Search_QueryToken::TT_WORD,           self::ST_CLOSEDINT_RQ_LAST_TERM),                   array(self::ST_CLOSEDINT_RQ_LAST_TERM,  Zend_Search_Lucene_Search_QueryToken::TT_RANGE_INCL_END, self::ST_COMMON_QUERY_ELEMENT)                  ));        $this->addRules(             array(array(self::ST_OPENEDINT_RQ_START,      Zend_Search_Lucene_Search_QueryToken::TT_WORD,           self::ST_OPENEDINT_RQ_FIRST_TERM),                   array(self::ST_OPENEDINT_RQ_FIRST_TERM, Zend_Search_Lucene_Search_QueryToken::TT_TO_LEXEME,      self::ST_OPENEDINT_RQ_TO_TERM),                   array(self::ST_OPENEDINT_RQ_TO_TERM,    Zend_Search_Lucene_Search_QueryToken::TT_WORD,           self::ST_OPENEDINT_RQ_LAST_TERM),                   array(self::ST_OPENEDINT_RQ_LAST_TERM,  Zend_Search_Lucene_Search_QueryToken::TT_RANGE_EXCL_END, self::ST_COMMON_QUERY_ELEMENT)                  ));        $addTermEntryAction             = new Zend_Search_Lucene_FSMAction($this, 'addTermEntry');        $addPhraseEntryAction           = new Zend_Search_Lucene_FSMAction($this, 'addPhraseEntry');        $setFieldAction                 = new Zend_Search_Lucene_FSMAction($this, 'setField');        $setSignAction                  = new Zend_Search_Lucene_FSMAction($this, 'setSign');        $setFuzzyProxAction             = new Zend_Search_Lucene_FSMAction($this, 'processFuzzyProximityModifier');        $processModifierParameterAction = new Zend_Search_Lucene_FSMAction($this, 'processModifierParameter');        $subqueryStartAction            = new Zend_Search_Lucene_FSMAction($this, 'subqueryStart');        $subqueryEndAction              = new Zend_Search_Lucene_FSMAction($this, 'subqueryEnd');        $logicalOperatorAction          = new Zend_Search_Lucene_FSMAction($this, 'logicalOperator');        $openedRQFirstTermAction        = new Zend_Search_Lucene_FSMAction($this, 'openedRQFirstTerm');        $openedRQLastTermAction         = new Zend_Search_Lucene_FSMAction($this, 'openedRQLastTerm');        $closedRQFirstTermAction        = new Zend_Search_Lucene_FSMAction($this, 'closedRQFirstTerm');        $closedRQLastTermAction         = new Zend_Search_Lucene_FSMAction($this, 'closedRQLastTerm');        $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_WORD,            $addTermEntryAction);        $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_PHRASE,          $addPhraseEntryAction);        $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_FIELD,           $setFieldAction);        $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_REQUIRED,        $setSignAction);        $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_PROHIBITED,      $setSignAction);        $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_FUZZY_PROX_MARK, $setFuzzyProxAction);        $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_NUMBER,          $processModifierParameterAction);        $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_SUBQUERY_START,  $subqueryStartAction);        $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_SUBQUERY_END,    $subqueryEndAction);        $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_AND_LEXEME,      $logicalOperatorAction);        $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_OR_LEXEME,       $logicalOperatorAction);        $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_NOT_LEXEME,      $logicalOperatorAction);        $this->addEntryAction(self::ST_OPENEDINT_RQ_FIRST_TERM, $openedRQFirstTermAction);        $this->addEntryAction(self::ST_OPENEDINT_RQ_LAST_TERM,  $openedRQLastTermAction);        $this->addEntryAction(self::ST_CLOSEDINT_RQ_FIRST_TERM, $closedRQFirstTermAction);        $this->addEntryAction(self::ST_CLOSEDINT_RQ_LAST_TERM,  $closedRQLastTermAction);        $this->_lexer = new Zend_Search_Lucene_Search_QueryLexer();    }    /**     * Get query parser instance     *      * @return Zend_Search_Lucene_Search_QueryParser     */    private static function _getInstance()    {        if (self::$_instance === null) {            self::$_instance = new self();        }        return self::$_instance;    }    /**     * Set query string default encoding     *     * @param string $encoding     */    public static function setDefaultEncoding($encoding)    {        self::_getInstance()->_defaultEncoding = $encoding;    }    /**     * Get query string default encoding     *

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -