protected function applyQuery(ESphinxQuery $query) { $this->applyCriteria($query->getCriteria()); $this->sphinxClient->AddQuery($query->getText(), $query->getIndexes()); }
public function testCreate() { $query = new ESphinxQuery('text', 'index'); $this->assertEquals($query->getText(), 'text'); $this->assertEquals($query->getIndexes(), 'index'); }
private function applyCondition(CDbCriteria $criteria, ESphinxQuery $query) { $queryCriteria = $query->getCriteria(); if (strlen($query->getText())) { $criteria->addCondition('MATCH(:match)'); $criteria->params[':match'] = $query->getText(); } foreach ($queryCriteria->getInConditions() as $name => $values) { $criteria->addInCondition($name, $values); } foreach ($queryCriteria->getNotInConditions() as $name => $values) { $criteria->addNotInCondition($name, $values); } foreach ($queryCriteria->getInRanges() as $name => $range) { $criteria->addBetweenCondition($name, $range['min'], $range['max']); } foreach ($queryCriteria->getNotInRanges() as $name => $range) { $criteria->addCondition("{$name} NOT BETWEEN ? AND ?"); $criteria->params[] = $range['min']; $criteria->params[] = $range['max']; } if ($queryCriteria->getIdMax()) { $criteria->addCondition('id <= :maxid'); $criteria->params[':maxid'] = $queryCriteria->getIdMax(); } if ($queryCriteria->getIdMin()) { $criteria->addCondition('id <= :minid'); $criteria->params[':minid'] = $queryCriteria->getIdMin(); } }
/** * @param $query * @return CDbCriteria */ private function createDbCriteria(ESphinxQuery $query) { $criteria = new ESphinxQlCriteria(); // create select $criteria->select = $query->getCriteria()->select; // process conditions $queryCriteria = $query->getCriteria(); if (strlen($query->getText())) { $criteria->addCondition('MATCH(' . ESphinxQlCriteria::PARAM_PREFIX . ESphinxQlCriteria::$paramCount . ')'); $criteria->params[ESphinxQlCriteria::PARAM_PREFIX . ESphinxQlCriteria::$paramCount++] = $query->getText(); } $this->applyIdLimits($criteria, $queryCriteria); $this->applyFilters($queryCriteria->getFilters(), $criteria); $this->applyRanges($queryCriteria->getRangeFilters(), $criteria); $this->applyGroup($criteria, $queryCriteria); $this->applyOrder($criteria, $queryCriteria); $this->applyOptions($criteria, $queryCriteria); // limit $criteria->limit = $queryCriteria->limit; $criteria->offset = $queryCriteria->offset; return $criteria; }