/** * Re-write query into primitive queries in the context of specified index * * @param \Zend\Search\Lucene\SearchIndex $index * @return \Zend\Search\Lucene\Search\Query\AbstractQuery */ public function rewrite(Lucene\SearchIndex $index) { if (count($this->_terms) == 0) { return new EmptyResult(); } // Check, that all fields are qualified $allQualified = true; foreach ($this->_terms as $term) { if ($term->field === null) { $allQualified = false; break; } } if ($allQualified) { return $this; } else { /** transform multiterm query to boolean and apply rewrite() method to subqueries. */ $query = new Boolean(); $query->setBoost($this->getBoost()); foreach ($this->_terms as $termId => $term) { $subquery = new Term($term); $query->addSubquery($subquery->rewrite($index), $this->_signs === null ? true : $this->_signs[$termId]); } return $query; } }