summaryrefslogtreecommitdiff
path: root/demos/quickstart/protected/index/Zend/Search/Lucene/Search/Query/Term.php
diff options
context:
space:
mode:
Diffstat (limited to 'demos/quickstart/protected/index/Zend/Search/Lucene/Search/Query/Term.php')
-rw-r--r--demos/quickstart/protected/index/Zend/Search/Lucene/Search/Query/Term.php126
1 files changed, 126 insertions, 0 deletions
diff --git a/demos/quickstart/protected/index/Zend/Search/Lucene/Search/Query/Term.php b/demos/quickstart/protected/index/Zend/Search/Lucene/Search/Query/Term.php
new file mode 100644
index 00000000..d622f845
--- /dev/null
+++ b/demos/quickstart/protected/index/Zend/Search/Lucene/Search/Query/Term.php
@@ -0,0 +1,126 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to version 1.0 of the Zend Framework
+ * license, that is bundled with this package in the file LICENSE, and
+ * is available through the world-wide-web at the following URL:
+ * http://www.zend.com/license/framework/1_0.txt. If you did not receive
+ * a copy of the Zend Framework license and are unable to obtain it
+ * through the world-wide-web, please send a note to license@zend.com
+ * so we can mail you a copy immediately.
+ *
+ * @package Zend_Search_Lucene
+ * @subpackage Search
+ * @copyright Copyright (c) 2005-2006 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://www.zend.com/license/framework/1_0.txt Zend Framework License version 1.0
+ */
+
+
+/** Zend_Search_Lucene_Search_Query */
+require_once 'Zend/Search/Lucene/Search/Query.php';
+
+/** Zend_Search_Lucene_Search_Weight_Term */
+require_once 'Zend/Search/Lucene/Search/Weight/Term.php';
+
+
+/**
+ * @package Zend_Search_Lucene
+ * @subpackage Search
+ * @copyright Copyright (c) 2005-2006 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://www.zend.com/license/framework/1_0.txt Zend Framework License version 1.0
+ */
+class Zend_Search_Lucene_Search_Query_Term extends Zend_Search_Lucene_Search_Query
+{
+ /**
+ * Term to find.
+ *
+ * @var Zend_Search_Lucene_Index_Term
+ */
+ private $_term;
+
+ /**
+ * Term sign.
+ * If true then term is required
+ * If false then term is prohibited.
+ *
+ * @var bool
+ */
+ private $_sign;
+
+ /**
+ * Documents vector.
+ * Bitset or array of document IDs
+ * (depending from Bitset extension availability).
+ *
+ * @var mixed
+ */
+ private $_docVector = null;
+
+ /**
+ * Term positions vector.
+ * Array: docId => array( pos1, pos2, ... )
+ *
+ * @var array
+ */
+ private $_termPositions;
+
+
+ /**
+ * Zend_Search_Lucene_Search_Query_Term constructor
+ *
+ * @param Zend_Search_Lucene_Index_Term $term
+ * @param boolean $sign
+ */
+ public function __construct( $term, $sign = true )
+ {
+ $this->_term = $term;
+ $this->_sign = $sign;
+ }
+
+
+ /**
+ * Constructs an appropriate Weight implementation for this query.
+ *
+ * @param Zend_Search_Lucene $reader
+ * @return Zend_Search_Lucene_Search_Weight
+ */
+ protected function _createWeight($reader)
+ {
+ return new Zend_Search_Lucene_Search_Weight_Term($this->_term, $this, $reader);
+ }
+
+ /**
+ * Score specified document
+ *
+ * @param integer $docId
+ * @param Zend_Search_Lucene $reader
+ * @return float
+ */
+ public function score( $docId, $reader )
+ {
+ if($this->_docVector===null) {
+ if (extension_loaded('bitset')) {
+ $this->_docVector = bitset_from_array( $reader->termDocs($this->_term) );
+ } else {
+ $this->_docVector = array_flip($reader->termDocs($this->_term));
+ }
+
+ $this->_termPositions = $reader->termPositions($this->_term);
+ $this->_initWeight($reader);
+ }
+
+ $match = extension_loaded('bitset') ? bitset_in($this->_docVector, $docId) :
+ isset($this->_docVector[$docId]);
+ if ($this->_sign && $match) {
+ return $reader->getSimilarity()->tf(count($this->_termPositions[$docId]) ) *
+ $this->_weight->getValue() *
+ $reader->norm($docId, $this->_term->field);
+ } else {
+ return 0;
+ }
+ }
+}
+