Esempio n. 1
0
 /**
  * Return SOLR search parameters based on a user query and params.
  *
  * @param AbstractQuery $query User query
  *
  * @return ParamBag
  */
 public function build(AbstractQuery $query)
 {
     $params = parent::build($query);
     if (!$query instanceof QueryGroup) {
         $q = $params->get('q');
         foreach ($q as &$value) {
             $value = $this->getLuceneHelper()->finalizeSearchString($value);
         }
         $params->set('q', $q);
     }
     return $params;
 }
Esempio n. 2
0
 /**
  * PrepareForLuceneSyntax
  *
  * @param String $input Input
  *
  * @return mixed
  */
 protected function prepareForLuceneSyntax($input)
 {
     $alreadyPrepared = parent::prepareForLuceneSyntax($input);
     preg_match_all("/(?P<name>\\w+?:|[ ]:)/", $input, $matches);
     if (count($matches["name"] > 0)) {
         foreach ($matches["name"] as $fieldNameWithColon) {
             $fieldNameNoColon = substr($fieldNameWithColon, 0, strpos($fieldNameWithColon, ":"));
             if (!in_array($fieldNameNoColon, $this->disMaxSearchFields)) {
                 $alreadyPrepared = str_replace($fieldNameWithColon, $fieldNameNoColon . " ", $alreadyPrepared);
             }
         }
     }
     //$alreadyPrepared = str_replace('-', ' ', $alreadyPrepared);
     //$alreadyPrepared = str_replace(array("-","="), ' ', $alreadyPrepared);
     $alreadyPrepared = str_replace(["="], ' ', $alreadyPrepared);
     return $alreadyPrepared;
 }
Esempio n. 3
0
 /**
  * Test generation with mix of quoted and unquoted phrases
  *
  * @return void
  */
 public function testMixedQuotedPhrasesWithEscapedQuote()
 {
     $qb = new QueryBuilder(['a' => ['QueryFields' => ['field_a' => [['or', '~']]]]]);
     $q = new Query('708396 "708398" 708399 "foo\\"bar"', 'a');
     $response = $qb->build($q);
     $processedQ = $response->get('q');
     $this->assertEquals('(field_a:(708396 OR "708398" OR 708399 OR "foo\\"bar"))', $processedQ[0]);
 }
 /**
  * Create the query builder.
  *
  * @return QueryBuilder
  */
 protected function createQueryBuilder()
 {
     $specs = $this->loadSpecs();
     $config = $this->config->get('config');
     $defaultDismax = isset($config->Index->default_dismax_handler) ? $config->Index->default_dismax_handler : 'dismax';
     $builder = new QueryBuilder($specs, $defaultDismax);
     // Configure builder:
     $search = $this->config->get($this->searchConfig);
     $caseSensitiveBooleans = isset($search->General->case_sensitive_bools) ? $search->General->case_sensitive_bools : true;
     $caseSensitiveRanges = isset($search->General->case_sensitive_ranges) ? $search->General->case_sensitive_ranges : true;
     $helper = new LuceneSyntaxHelper($caseSensitiveBooleans, $caseSensitiveRanges);
     $builder->setLuceneHelper($helper);
     return $builder;
 }
Esempio n. 5
0
 /**
  * Test generation from a QueryGroup with advanced syntax
  *
  * @return void
  */
 public function testQueryGroupWithAdvancedSyntax()
 {
     $qb = new QueryBuilder(['a' => ['DismaxFields' => ['field_a'], 'QueryFields' => ['field_a' => [['and', 100]], 'field_c' => [['and', 200]]]], 'b' => ['DismaxFields' => ['field_b']]]);
     $q1 = new Query('value*', 'a');
     $q2 = new Query('value2', 'b');
     $q = new QueryGroup('OR', [$q1, $q2]);
     $response = $qb->build($q);
     $processedQ = $response->get('q');
     $this->assertEquals('((field_a:(value*)^100 OR field_c:(value*)^200) OR (_query_:"{!dismax qf=\\"field_b\\" }value2"))', $processedQ[0]);
 }