Ejemplo n.º 1
0
 /**
  * The sum of squared weights of contained query clauses.
  *
  * @return float
  */
 public function sumOfSquaredWeights()
 {
     // compute idf
     $this->_idf = $this->_reader->getSimilarity()->idf($this->_term, $this->_reader);
     // compute query weight
     $this->_queryWeight = $this->_idf * $this->_query->getBoost();
     // square it
     return $this->_queryWeight * $this->_queryWeight;
 }
Ejemplo n.º 2
0
 public function __construct(Zend_Search_Lucene_Search_Query $query, Zend_Search_Lucene_Interface $reader)
 {
     $this->_query = $query;
     $this->_reader = $reader;
     $this->_weights = array();
     $signs = $query->getSigns();
     foreach ($query->getSubqueries() as $num => $subquery) {
         if ($signs === null || $signs[$num] === null || $signs[$num]) {
             $this->_weights[$num] = $subquery->createWeight($reader);
         }
     }
 }
Ejemplo n.º 3
0
 public function __construct(Zend_Search_Lucene_Search_Query $query, Zend_Search_Lucene_Interface $reader)
 {
     $this->_query = $query;
     $this->_reader = $reader;
     $this->_weights = array();
     $signs = $query->getSigns();
     foreach ($query->getTerms() as $id => $term) {
         if ($signs === null || $signs[$id] === null || $signs[$id]) {
             $this->_weights[$id] = new Zend_Search_Lucene_Search_Weight_Term($term, $query, $reader);
             $query->setWeight($id, $this->_weights[$id]);
         }
     }
 }
Ejemplo n.º 4
0
 /**
  * Assigns the query normalization factor to this.
  *
  * @param float $queryNorm
  */
 public function normalize($queryNorm)
 {
     // incorporate boost
     $queryNorm *= $this->_query->getBoost();
     foreach ($this->_weights as $weight) {
         $weight->normalize($queryNorm);
     }
 }
 /**
  * Constructor
  * 
  * @param \Zend_Search_Lucene_Interface					Lucene index instance
  * @param \Zend_Search_Lucene_Search_Query $query		Lucene query
  * @param array $terms									Original search terms
  * @param boolean $highlight							Highlight search terms in results
  * @return void
  */
 public function __construct(\Zend_Search_Lucene_Interface $index, \Zend_Search_Lucene_Search_Query $query, array $terms = array(), $highlight = false)
 {
     $this->_index = $index;
     $this->_query = $query;
     $this->_terms = $terms;
     $this->_index->addReference();
     // Run the Lucene search and register the results
     foreach ($this->_index->find($this->_query) as $hit) {
         $this->_hits[] = \Tollwerk\TwLucenesearch\Domain\Model\QueryHit::cast($hit);
     }
     // If search terms should be highlighted ...
     if (count($this->_hits) && $highlight) {
         $this->_highlight = array();
         foreach ($this->_query->rewrite($this->_index)->getQueryTerms() as $term) {
             if (!array_key_exists($term->field, $this->_highlight)) {
                 $this->_highlight[$term->field] = array($term->text);
             } else {
                 $this->_highlight[$term->field][] = $term->text;
             }
         }
     }
 }
Ejemplo n.º 6
0
 /**
  * Transform entry to a subquery
  *
  * @param string $encoding
  * @return Zend_Search_Lucene_Search_Query
  */
 public function getQuery($encoding)
 {
     $this->_query->setBoost($this->_boost);
     return $this->_query;
 }
Ejemplo n.º 7
0
 /**
  *
  * @param int $id
  * @param Zend_Search_Lucene_Search_Query $query
  * @return array
  */
 public function getDocumentData($id, $query = null)
 {
     $highlighter = Axis::single('search/highlighter_default');
     $doc = $this->_index->getDocument($id);
     $result = array('type' => $doc->type, 'nameHighlight' => null === $query ? $doc->name : @$query->htmlFragmentHighlightMatches($doc->name, $this->_encoding, $highlighter), 'name' => $doc->name, 'contents' => null === $query ? $doc->contents : @$query->htmlFragmentHighlightMatches($doc->contents, $this->_encoding, $highlighter), 'urlHighlight' => null === $query ? $doc->url : @$query->htmlFragmentHighlightMatches($doc->url, $this->_encoding, $highlighter), 'url' => $doc->url);
     if (in_array($doc->type, array('product'))) {
         $result['image'] = $doc->image;
         $result['image_title'] = $doc->image_title;
     }
     return $result;
 }
Ejemplo n.º 8
0
 /**
  * Use the Zend engine to highlight matches for terms in a document
  * @param  Zend_Search_Lucene_Search_Query $query
  * @param string $content
  */
 private function _highlightMatches(&$query, $content)
 {
     $content = preg_replace('/.*<html><body><p>/s', '', $query->highlightMatches($content));
     $content = preg_replace('/<\\/p><\\/body><\\/html>/s', '', $content);
     return $content;
 }
Ejemplo n.º 9
0
 /**
  * Return the search terms of a lucene search query within the context of the current index 
  * 	
  * @param \Zend_Search_Lucene_Search_Query $query				Lucene search query
  * @return array												Search terms 
  */
 public function getQueryTerms(\Zend_Search_Lucene_Search_Query $query)
 {
     $terms = array();
     foreach ($query->rewrite($this->_index)->getQueryTerms() as $term) {
         if (!array_key_exists($term->field, $terms)) {
             $terms[$term->field] = array($term->text);
         } else {
             $terms[$term->field][] = $term->text;
         }
     }
     return $terms;
 }
 /**
  * Adds a query.
  *
  * @param Zend_Search_Lucene_Search_Query $q
  */
 private function add(Zend_Search_Lucene_Search_Query $q)
 {
     $autoClose = false;
     // apply modifiers
     foreach ($this->modifiers as $type => $value) {
         switch ($type) {
             case self::M_BOOST:
                 $q->setBoost($value);
                 break;
             case self::M_REQUIREMENT:
                 $q = new Zend_Search_Lucene_Search_Query_Boolean(array($q), array($value));
                 $autoClose = true;
                 break;
         }
     }
     $this->modifiers = array();
     // determine how to add the query
     if ($this->master === null) {
         $this->master = $q;
     } else {
         $c = count($this->queries);
         if ($c == 0) {
             throw new xfLuceneException('Cannot add a query to a ' . get_class($this->master) . ' query, likely a mismatch in creating a boolean query');
         }
         $this->queries[count($this->queries) - 1]->addSubquery($q);
     }
     if (!$autoClose && $q instanceof Zend_Search_Lucene_Search_Query_Boolean) {
         $this->queries[] = $q;
     }
 }