/** * Builds a query based on QueryString syntax * @param array $fields the fields * @param string $queryString the query * @param integer $phraseSlop phrase slop * @param string $defaultOperator the default operator AND or OR * @return \Elastica\Query\QueryString */ public function buildQueryString(array $fields, $queryString, $phraseSlop, $defaultOperator = 'AND') { $query = new \Elastica\Query\QueryString($queryString); $query->setFields($fields); $query->setAutoGeneratePhraseQueries(true); $query->setPhraseSlop($phraseSlop); $query->setDefaultOperator($defaultOperator); $query->setAllowLeadingWildcard($this->context->isAllowLeadingWildcards()); $query->setFuzzyPrefixLength(2); $query->setRewrite('top_terms_boost_1024'); $states = $this->context->getConfig()->get('CirrusSearchQueryStringMaxDeterminizedStates'); if (isset($states)) { // Requires ES 1.4+ $query->setParam('max_determinized_states', $states); } return $query; }
/** * Builds a query based on QueryString syntax * @param array $fields the fields * @param string $queryString the query * @param integer $phraseSlop phrase slop * @param string $defaultOperator the default operator AND or OR * @return \Elastica\Query\QueryString */ public function buildQueryString(array $fields, $queryString, $phraseSlop, $defaultOperator = 'AND') { $query = new \Elastica\Query\QueryString($queryString); $query->setFields($fields); $query->setAutoGeneratePhraseQueries(true); $query->setPhraseSlop($phraseSlop); $query->setDefaultOperator($defaultOperator); $query->setAllowLeadingWildcard($this->context->isAllowLeadingWildcards()); $query->setFuzzyPrefixLength(2); $query->setRewrite('top_terms_boost_1024'); return $query; }
/** * @param string $queryString * @param array $options * @return \Elastica\Query */ protected function buildQueryObject($queryString, $options) { // trying to match everything, make a MatchAll query if ($queryString == '*') { $queryObj = new \Elastica\Query\MatchAll(); } else { $qString = html_entity_decode($queryString, ENT_QUOTES); // we need to escape slash for lucene query_string query $qString = str_replace('/', '\\/', $qString); $queryObj = new \Elastica\Query\QueryString($qString); $queryObj->setAnalyzeWildcard(true); $queryObj->setAutoGeneratePhraseQueries(false); // set query string fields $options['addSearchBoosts'] = true; $fields = $this->getSearchFields($options); $options['addSearchBoosts'] = false; if (!empty($options['searchFields'])) { $queryObj->setFields($options['searchFields']); } else { $queryObj->setFields($fields); } } return $queryObj; }