/**
  * This action is a friendly advanced search interface.  It lets the
  * user use a form to control some of the advanced query syntaxes.
  */
 public function executeAdvanced($request)
 {
     // disable this action if advanced searching is disabled.
     $this->forward404Unless(sfConfig::get('app_lucene_advanced', true) == true, 'advanced support is disabled');
     // determine if the "Basic" button was clicked
     if ($request->getParameter('commit') == $this->translate('Basic')) {
         $this->redirect($this->getModuleName() . '/search');
     }
     $form = new sfLuceneAdvancedForm();
     $this->configureCategories($form);
     $this->form = $form;
     // continue only if there was a submit
     if (!$request->getParameter($form->getName())) {
         return sfView::SUCCESS;
     }
     $form->bind($request->getParameter($form->getName()));
     $values = $form->getValues();
     // build the criteria
     $c = new sfLuceneCriteria();
     $c->addSane($values['keywords']);
     $query = $values['keywords'];
     // build the must have part
     $keywords = preg_split("/[\\s,]+/", $values['musthave']);
     foreach ($keywords as $keyword) {
         $c->add("+" . sfLuceneCriteria::sanitize($keyword), sfLuceneCriteria::TYPE_NONE, true);
     }
     $query .= ' ' . $values['musthave'];
     // build the must have part
     $keywords = preg_split("/[\\s,]+/", $values['mustnothave']);
     foreach ($keywords as $keyword) {
         $c->add("-" . sfLuceneCriteria::sanitize($keyword), sfLuceneCriteria::TYPE_NONE, true);
     }
     $query .= ' ' . $values['mustnothave'];
     // build the has pharse part
     $c->add("+" . sfLuceneCriteria::sanitize($values['hasphrase']), sfLuceneCriteria::TYPE_NONE, true);
     $query .= ' ' . $values['hasphrase'];
     if (sfConfig::get('app_lucene_categories', true) && isset($values['category']) && $values['category'] != $this->translate('All')) {
         $c->add('sfl_category: ' . $values['category']);
     }
     $pager = new sfLucenePager($this->getLuceneInstance()->friendlyFind($c));
     // display results
     $pager = $this->configurePager($pager, $form);
     $this->getContext()->getConfiguration()->loadHelpers('sfLucene');
     $this->pager = $pager;
     $this->query = $query;
     $this->setTitleI18n('Advanced Search');
 }
 /**
  * Wrapper function for getting the results.
  */
 protected function getResults($form)
 {
     $data = $form->getValues();
     $query = new sfLuceneCriteria($this->getLuceneInstance());
     $query->addSane($data['query']);
     if (sfConfig::get('app_lucene_categories', true) && isset($data['category']) && $data['category'] != $this->translate('All')) {
         $query->add('sfl_category: ' . $data['category']);
     }
     return new sfLucenePager($this->getLuceneInstance()->friendlyFind($query));
 }
{
    return sfLuceneCriteria::newInstance(sfLucene::getInstance('testLucene'));
}
$t->diag('testing constructors');
try {
    $criteria = new sfLuceneCriteria(sfLucene::getInstance('testLucene'));
    $t->pass('__construct() takes a sfLucene instance');
} catch (Exception $e) {
    $t->fail('__construct() takes a sfLuce instance');
}
$t->isa_ok(sfLuceneCriteria::newInstance(sfLucene::getInstance('testLucene')), 'sfLuceneCriteria', '::newInstance() returns an sfLuceneCriteria object');
$t->diag('testing ->getQuery()');
$t->isa_ok($criteria->getQuery(), 'Zend_Search_Lucene_Search_Query_Boolean', '->getQuery() returns an instance of ZSL_Search_Query_Boolean');
$t->diag('testing ->add()');
try {
    $criteria->add('test', true);
    $t->pass('->add() accepts a string');
    $queries = inst()->add('foo')->add('bar')->getQuery()->getSubqueries();
    $t->ok($queries[0] == Zend_Search_Lucene_Search_QueryParser::parse('foo'), '->add() correctly parses and adds text queries');
    $t->ok($queries[1] == Zend_Search_Lucene_Search_QueryParser::parse('bar'), '->add() correctly parses and adds text queries and keeps them in order');
} catch (Exception $e) {
    $e->printStackTrace();
    $t->fail('->add() accepts a string');
    $t->skip('->add() correctly parses and adds text queries');
    $t->skip('->add() correctly parses and adds text queries and keeps them in order');
}
try {
    $criteria->add(new Zend_Search_Lucene_Search_Query_Boolean(), false);
    $t->pass('->add() accepts a Zend query');
    $query = new Zend_Search_Lucene_Search_Query_MultiTerm();
    $query->addTerm(new Zend_Search_Lucene_Index_Term('word1'), true);
 /**
  * This method try to parse the provided $phrase into a valid solr query
  * The method can handle +/- and quote grouping
  *
  * @param string $field 
  * @param string $phrase 
  * @return sfLuceneCriteria 
  */
 public function addPhraseFieldGuess($field, $full_phrase, $type = sfLuceneCriteria::TYPE_AND)
 {
     $main_criteria = new sfLuceneCriteria();
     foreach ($this->guessParts($full_phrase) as $section => $phrases) {
         if (count($phrases) == 0) {
             continue;
         }
         $inner_type = $section == 'must_contains' || $section == 'must_not_contains' ? 'AND' : 'OR';
         $sign = $section == 'must_contains' ? '+' : ($section == 'must_not_contains' ? '-' : '');
         $c = new sfLuceneCriteria();
         foreach ($phrases as $phrase) {
             $c->add($sign . '(' . self::sanitize($phrase) . ')', $inner_type, true);
         }
         $main_criteria->add('(' . $c->getQuery() . ')', 'AND', true);
     }
     $this->addField($field, $main_criteria, $type, true);
     return $this;
 }