setPhraseSlop() 공개 메소드

If zero, exact phrases are required. If not set, defaults to zero.
public setPhraseSlop ( integer $phraseSlop )
$phraseSlop integer
예제 #1
0
 /**
  * Search the index
  *
  * @return void
  */
 public function search($lang, $version, $options = [])
 {
     $options += ['query' => '', 'page' => 1, 'sort' => ['_score']];
     $typeName = implode('-', [$version, $lang]);
     // This is a bit dangerous, but this class only has one real method.
     $this->name($typeName);
     $query = $this->query();
     $q = new QueryString($options['query']);
     $q->setPhraseSlop(2)->setFields(['contents', 'title^3'])->setDefaultOperator('AND')->setFuzzyMinSim('0.7');
     $query->page($options['page'], 25)->highlight(['pre_tags' => [''], 'post_tags' => [''], 'fields' => ['contents' => ['fragment_size' => 100, 'number_of_fragments' => 3]]])->where(function ($builder) {
         return $builder->matchAll();
     })->query($q);
     $results = $query->all();
     $rows = $results->map(function ($row) {
         $contents = '';
         if ($row->highlights()) {
             $contents = $row->highlights()['contents'];
         }
         return ['title' => $row->title ?: '', 'url' => $row->url, 'contents' => $contents];
     });
     return ['page' => $options['page'] ?: 1, 'total' => $results->getTotalHits(), 'data' => $rows];
 }
 /**
  * @group unit
  */
 public function testSetPhraseSlop()
 {
     $phraseSlop = 9;
     $query = new QueryString('test');
     $query->setPhraseSlop($phraseSlop);
     $data = $query->toArray();
     $this->assertEquals($phraseSlop, $data['query_string']['phrase_slop']);
 }
 /**
  * @param string[] $fields
  * @param string $queryString
  * @param int $phraseSlop
  * @param boolean $isRescore
  * @return \Elastica\Query\Simple
  */
 private function buildSearchTextQueryForFields(array $fields, $queryString, $phraseSlop, $isRescore)
 {
     $query = new \Elastica\Query\QueryString($queryString);
     $query->setFields($fields);
     $query->setAutoGeneratePhraseQueries(true);
     $query->setPhraseSlop($phraseSlop);
     $query->setDefaultOperator('AND');
     $query->setAllowLeadingWildcard($this->config->get('CirrusSearchAllowLeadingWildcard'));
     $query->setFuzzyPrefixLength(2);
     $query->setRewrite('top_terms_boost_1024');
     $states = $this->config->get('CirrusSearchQueryStringMaxDeterminizedStates');
     if (isset($states)) {
         // Requires ES 1.4+
         $query->setParam('max_determinized_states', $states);
     }
     return $this->wrapInSaferIfPossible($query, $isRescore);
 }