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