/**
  * 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;
 }
コード例 #3
0
 /**
  * @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;
 }