protected function applyCriteria(ESphinxSearchCriteria $criteria)
{
$this->applyMatchMode($criteria->matchMode);
$this->applyRankMode($criteria);
if ($criteria->sortMode == ESphinxSort::EXTENDED) {
$orders = '';
if ($orderArray = $criteria->getOrders()) {
$fields = array();
foreach ($orderArray as $attr => $type) {
$fields[] = $attr . ' ' . $type;
}
$orders = implode(', ', $fields);
}
$this->applySortMode($criteria->sortMode, $orders);
} else {
$this->applySortMode($criteria->sortMode, $criteria->getSortBy());
}
// apply select
if (strlen($criteria->select)) {
$this->sphinxClient->SetSelect($criteria->select);
}
// apply limit
if ($criteria->limit) {
$this->sphinxClient->SetLimits($criteria->offset, $criteria->limit, $criteria->maxMatches, $criteria->cutOff);
}
// apply group
if ($criteria->groupBy) {
$this->sphinxClient->SetGroupBy($criteria->groupBy, $criteria->groupByFunc, $criteria->groupBySort);
}
if ($criteria->groupDistinct) {
$this->sphinxClient->SetGroupDistinct($criteria->groupDistinct);
}
// apply id range
if ($criteria->getIsIdRangeSetted()) {
$this->sphinxClient->SetIDRange($criteria->getMinId(), $criteria->getMaxId());
}
// apply weights
$this->applyFieldWeights($criteria->getFieldWeights());
$this->applyIndexWeights($criteria->getIndexWeights());
$this->applyFilters($criteria->getFilters());
$this->applyRanges($criteria->getRangeFilters());
$this->sphinxClient->SetMaxQueryTime($criteria->queryTimeout !== null ? $criteria->queryTimeout : $this->_queryTimeout);
if (VER_COMMAND_SEARCH >= 0x11d) {
$this->applyOptions($criteria);
}
}