コード例 #1
0
 private function applyOptions(ESphinxSearchCriteria $queryCriteria)
 {
     if ($queryCriteria->booleanSimplify !== null) {
         $this->sphinxClient->SetQueryFlag('boolean_simplify', $queryCriteria->booleanSimplify);
     }
     if (($revScan = $queryCriteria->getReverseScan()) !== null) {
         $this->sphinxClient->SetQueryFlag('reverse_scan', $revScan ? 1 : 0);
     }
     if (($sortMode = $queryCriteria->getSortMethod()) !== null) {
         $this->sphinxClient->SetQueryFlag('sort_method', $sortMode);
     }
     if ($queryCriteria->globalIdf !== null) {
         $this->sphinxClient->SetQueryFlag('global_idf', $queryCriteria->globalIdf);
     }
     if (($idf = $queryCriteria->getIdf()) !== null) {
         $this->sphinxClient->SetQueryFlag('idf', $idf);
     }
 }
コード例 #2
0
 public function testExtendedSort()
 {
     $sphinx = $this->createConnection();
     $criteria = new ESphinxSearchCriteria();
     $criteria->sortMode = ESphinxSort::EXTENDED;
     $criteria->addOrder('user_id', 'ASC');
     $criteria->addOrder('id', 'DESC');
     $query = new ESphinxQuery('', 'article', $criteria);
     $result = $sphinx->executeQuery($query);
     $this->assertEquals($result->getFound(), 5);
     $this->assertEquals($result[0]->id, 1);
     $this->assertEquals($result[1]->id, 2);
     $this->assertEquals($result[2]->id, 3);
     $this->assertEquals($result[3]->id, 5);
     $this->assertEquals($result[4]->id, 4);
 }
コード例 #3
0
 public function testIndexWeights()
 {
     $criteria = new ESphinxSearchCriteria();
     try {
         $criteria->addIndexWeight('', '');
         $this->setExpectedException('ESphinxException');
     } catch (Exception $e) {
         $this->assertInstanceOf('ESphinxException', $e);
     }
     try {
         $criteria->addIndexWeight('index', '123');
         $this->setExpectedException('ESphinxException');
     } catch (Exception $e) {
         $this->assertInstanceOf('ESphinxException', $e);
     }
     try {
         $criteria->addIndexWeight('index', 123.0);
         $this->setExpectedException('ESphinxException');
     } catch (Exception $e) {
         $this->assertInstanceOf('ESphinxException', $e);
     }
     $criteria->addIndexWeight('index', 123);
     $criteria->addIndexWeight('index2', 123);
     $this->assertEquals($criteria->getIndexWeights(), array('index' => 123, 'index2' => 123));
     $criteria->cleanIndexWeights();
     $this->assertEquals($criteria->getIndexWeights(), array());
     $criteria->addIndexWeights(array('index' => 123, 'index2' => 123));
     $this->assertEquals($criteria->getIndexWeights(), array('index' => 123, 'index2' => 123));
 }
コード例 #4
0
 private function applyOptions(ESphinxQlCriteria $criteria, ESphinxSearchCriteria $queryCriteria)
 {
     $options = array();
     if ($queryCriteria->maxMatches !== null) {
         $options['max_matches'] = $queryCriteria->maxMatches;
     }
     if ($queryCriteria->cutOff !== null) {
         $options['cutoff'] = $queryCriteria->cutOff;
     }
     if ($idxWeights = $queryCriteria->getIndexWeights()) {
         $options['index_weights'] = '(' . $this->implodeKV($idxWeights, '=') . ')';
     }
     if ($fieldsWeights = $queryCriteria->getFieldWeights()) {
         $options['field_weights'] = '(' . $this->implodeKV($fieldsWeights, '=') . ')';
     }
     if ($queryCriteria->comment) {
         $options['comment'] = $queryCriteria->comment;
     }
     if ($queryCriteria->booleanSimplify !== null) {
         $options['boolean_simplify'] = $queryCriteria->booleanSimplify;
     }
     if (($revScan = $queryCriteria->getReverseScan()) !== null) {
         $options['reverse_scan'] = $revScan ? 1 : 0;
     }
     if (($sortMode = $queryCriteria->getSortMethod()) !== null) {
         $options['sort_method'] = $sortMode;
     }
     if ($queryCriteria->globalIdf !== null) {
         $options['global_idf'] = $queryCriteria->globalIdf;
     }
     if (($idf = $queryCriteria->getIdf()) !== null) {
         $options['idf'] = $idf;
     }
     $options['max_query_time'] = $queryCriteria->queryTimeout !== null ? $queryCriteria->queryTimeout : $this->queryTimeout;
     // ranking mode
     if ($queryCriteria->rankingMode) {
         $ranker = ESphinxRank::item($queryCriteria->rankingMode);
         if ($queryCriteria->rankingMode != ESphinxRank::EXPR) {
             $options['ranker'] = $ranker;
         } else {
             $options['ranker'] = $ranker . "('" . $queryCriteria->rankingExpression . "')";
         }
     }
     $criteria->option = $this->implodeKV($options, '=');
 }