public function testRank() { $this->assertEquals(ESphinxRank::PROXIMITY_BM25, SPH_RANK_PROXIMITY_BM25); $this->assertEquals(ESphinxRank::BM25, SPH_RANK_BM25); $this->assertEquals(ESphinxRank::NONE, SPH_RANK_NONE); $this->assertEquals(ESphinxRank::WORDCOUNT, SPH_RANK_WORDCOUNT); $this->assertEquals(ESphinxRank::PROXIMITY, SPH_RANK_PROXIMITY); $this->assertEquals(ESphinxRank::MATCHANY, SPH_RANK_MATCHANY); $this->assertEquals(ESphinxRank::FIELDMASK, SPH_RANK_FIELDMASK); $this->assertEquals(ESphinxRank::SPH04, SPH_RANK_SPH04); $this->assertEquals(ESphinxRank::EXPR, SPH_RANK_EXPR); $this->assertEquals(ESphinxRank::TOTAL, SPH_RANK_TOTAL); $this->assertCount(9, ESphinxRank::items()); }
protected function applyRankMode(ESphinxSearchCriteria $criteria) { if (!$criteria->rankingMode) { return; } if (!ESphinxRank::isValid($criteria->rankingMode)) { throw new ESphinxException("Rank mode {$criteria->rankingMode} is not defined"); } $this->sphinxClient->SetRankingMode($criteria->rankingMode, $criteria->rankingExpression); }
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, '='); }