Beispiel #1
0
 public function score($docId, Zend_Search_Lucene_Interface $reader)
 {
     if (isset($this->_docVector[$docId])) {
         return $reader->getSimilarity()->tf($this->_termFreqs[$docId]) * $this->_weight->getValue() * $reader->norm($docId, $this->_term->field) * $this->getBoost();
     } else {
         return 0;
     }
 }
 /**
  * Score calculator for non conjunction queries (not all terms are required)
  *
  * @param integer $docId
  * @param Zend_Search_Lucene_Interface $reader
  * @return float
  */
 public function _nonConjunctionScore($docId, $reader)
 {
     if ($this->_coord === null) {
         $this->_coord = array();
         $maxCoord = 0;
         foreach ($this->_signs as $sign) {
             if ($sign !== false) {
                 $maxCoord++;
             }
         }
         for ($count = 0; $count <= $maxCoord; $count++) {
             $this->_coord[$count] = $reader->getSimilarity()->coord($count, $maxCoord);
         }
     }
     $score = 0.0;
     $matchedTerms = 0;
     foreach ($this->_terms as $termId => $term) {
         // Check if term is
         if ($this->_signs[$termId] !== false && isset($this->_termsFreqs[$termId][$docId])) {
             $matchedTerms++;
             /**
              * We don't need to check that term freq is not 0
              * Score calculation is performed only for matched docs
              */
             $score += $reader->getSimilarity()->tf($this->_termsFreqs[$termId][$docId]) * $this->_weights[$termId]->getValue() * $reader->norm($docId, $term->field);
         }
     }
     return $score * $this->_coord[$matchedTerms] * $this->getBoost();
 }
Beispiel #3
0
 /**
  * Returns a normalization factor for "field, document" pair.
  *
  * @param integer $id
  * @param string $fieldName
  * @return float
  */
 public function norm($id, $fieldName)
 {
     return $this->_index->norm($id, $fieldName);
 }
Beispiel #4
0
 public function _conjunctionScore($docId, Zend_Search_Lucene_Interface $reader)
 {
     if ($this->_coord === null) {
         $this->_coord = $reader->getSimilarity()->coord(count($this->_terms), count($this->_terms));
     }
     $score = 0.0;
     foreach ($this->_terms as $termId => $term) {
         $score += $reader->getSimilarity()->tf($this->_termsFreqs[$termId][$docId]) * $this->_weights[$termId]->getValue() * $reader->norm($docId, $term->field);
     }
     return $score * $this->_coord * $this->getBoost();
 }