Initial commit
[moodle.git] / search / Zend / Search / Lucene / Search / Weight / MultiTerm.php
1 <?php
2 /**
3  * Zend Framework
4  *
5  * LICENSE
6  *
7  * This source file is subject to the new BSD license that is bundled
8  * with this package in the file LICENSE.txt.
9  * It is also available through the world-wide-web at this URL:
10  * http://framework.zend.com/license/new-bsd
11  * If you did not receive a copy of the license and are unable to
12  * obtain it through the world-wide-web, please send an email
13  * to license@zend.com so we can send you a copy immediately.
14  *
15  * @category   Zend
16  * @package    Zend_Search_Lucene
17  * @subpackage Search
18  * @copyright  Copyright (c) 2006 Zend Technologies USA Inc. (http://www.zend.com)
19  * @license    http://framework.zend.com/license/new-bsd     New BSD License
20  */
23 /** Zend_Search_Lucene_Search_Weight */
24 require_once 'Zend/Search/Lucene/Search/Weight.php';
27 /**
28  * @category   Zend
29  * @package    Zend_Search_Lucene
30  * @subpackage Search
31  * @copyright  Copyright (c) 2006 Zend Technologies USA Inc. (http://www.zend.com)
32  * @license    http://framework.zend.com/license/new-bsd     New BSD License
33  */
34 class Zend_Search_Lucene_Search_Weight_MultiTerm extends Zend_Search_Lucene_Search_Weight
35 {
36     /**
37      * IndexReader.
38      *
39      * @var Zend_Search_Lucene
40      */
41     private $_reader;
43     /**
44      * The query that this concerns.
45      *
46      * @var Zend_Search_Lucene_Search_Query_MultiTerm
47      */
48     private $_query;
50     /**
51      * Query terms weights
52      * Array of Zend_Search_Lucene_Search_Weight_Term
53      *
54      * @var array
55      */
56     private $_weights;
59     /**
60      * Zend_Search_Lucene_Search_Weight_MultiTerm constructor
61      * query - the query that this concerns.
62      * reader - index reader
63      *
64      * @param Zend_Search_Lucene_Search_Query_MultiTerm $query
65      * @param Zend_Search_Lucene $reader
66      */
67     public function __construct($query, $reader)
68     {
69         $this->_query   = $query;
70         $this->_reader  = $reader;
71         $this->_weights = array();
73         $signs = $query->getSigns();
75         foreach ($query->getTerms() as $num => $term) {
76             if ($signs === null || $signs[$num] === null || $signs[$num]) {
77                 $this->_weights[$num] = new Zend_Search_Lucene_Search_Weight_Term($term, $query, $reader);
78                 $query->setWeight($num, $this->_weights[$num]);
79             }
80         }
81     }
84     /**
85      * The weight for this query
86      *
87      * @return float
88      */
89     public function getValue()
90     {
91         return $this->_query->getBoost();
92     }
95     /**
96      * The sum of squared weights of contained query clauses.
97      *
98      * @return float
99      */
100     public function sumOfSquaredWeights()
101     {
102         $sum = 0;
103         foreach ($this->_weights as $weight) {
104             // sum sub weights
105             $sum += $weight->sumOfSquaredWeights();
106         }
108         // boost each sub-weight
109         $sum *= $this->_query->getBoost() * $this->_query->getBoost();
111         // check for empty query (like '-something -another')
112         if ($sum == 0) {
113             $sum = 1.0;
114         }
115         return $sum;
116     }
119     /**
120      * Assigns the query normalization factor to this.
121      *
122      * @param float $queryNorm
123      */
124     public function normalize($queryNorm)
125     {
126         // incorporate boost
127         $queryNorm *= $this->_query->getBoost();
129         foreach ($this->_weights as $weight) {
130             $weight->normalize($queryNorm);
131         }
132     }