/** * 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; }
/** * 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]); }
/** * 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]); }