params = $params; } private function buildConfigClause() { $config = array(); if (isset($this->params->config->start)) { $config[] = Constant::get(self::CONFIG_CLAUSE_START) . self::CLAUSE_CONFIG_KV_SEPARATOR . $this->params->config->start; } if (isset($this->params->config->hits)) { $config[] = Constant::get(self::CONFIG_CLAUSE_HIT) . self::CLAUSE_CONFIG_KV_SEPARATOR . $this->params->config->hits; } if (isset($this->params->config->searchFormat)) { $format = $this->params->config->searchFormat; $config[] = Constant::get(self::CONFIG_CLAUSE_FORMAT) . self::CLAUSE_CONFIG_KV_SEPARATOR . strtolower(searchFormat::$__names[$format]); } if (isset($this->params->rank->reRankSize)) { $config[] = Constant::get(self::CONFIG_CLAUSE_RERANK_SIZE) . self::CLAUSE_CONFIG_KV_SEPARATOR . $this->params->rank->reRankSize; } if (isset($this->params->config->customConfig)) { foreach ($this->params->config->customConfig as $k => $v) { $config[] = $k . self::CLAUSE_CONFIG_KV_SEPARATOR . $v; } } $this->clauses[self::CONFIG_KEY] = implode(self::CLAUSE_CONFIG_SEPARATOR, $config); } private function buildQueryClause() { if ($this->params->query !== null) { $this->clauses[self::QUERY_KEY] = $this->params->query; } } private function buildSortClause() { $sorts = array(); if (isset($this->params->sort->sortFields)) { foreach ($this->params->sort->sortFields as $sortField) { $order = $sortField->order; $orderString = Order::$__names[$order]; $sorts[] = Constant::get('SORT_CLAUSE_' . $orderString) . $sortField->field; } $this->clauses[self::SORT_KEY] = implode(self::CLAUSE_SORT_SEPARATOR, $sorts); } } private function buildFilterClause() { if (isset($this->params->filter)) { $this->clauses[self::FILTER_KEY] = $this->params->filter; } } private function buildDistinctClause() { $distincts = array(); if (isset($this->params->distincts)) { $keys = array( 'key' => self::DISTINCT_CLAUSE_DIST_KEY, 'distCount' => self::DISTINCT_CLAUSE_DIST_COUNT, 'distTimes' => self::DISTINCT_CLAUSE_DIST_TIMES, 'reserved' => self::DISTINCT_CLAUSE_RESERVED, 'distFilter' => self::DISTINCT_CLAUSE_DIST_FILTER, 'updateTotalHit' => self::DISTINCT_CLAUSE_UPDATE_TOTAL_HIT, 'grade' => self::DISTINCT_CLAUSE_GRADE ); foreach ($this->params->distincts as $distinct) { if (!isset($distinct->key)) { continue; } $dist = array(); foreach ($keys as $k => $v) { if ($distinct->$k) { $dist[] = Constant::get($v) . self::CLAUSE_AGGREGATE_KV_SEPARATOR . $distinct->$k; } } $distincts[] = implode(self::CLAUSE_DISTINCT_SUB_SEPARATOR, $dist); } $this->clauses[self::DISTINCT_KEY] = implode(self::CLAUSE_DISTINCT_SEPARATOR, $distincts); } } private function buildAggregateClause() { $aggregates = array(); if (isset($this->params->aggregates)) { $keys = array( 'groupKey' => self::AGGREGATE_CLAUSE_GROUP_KEY, 'aggFun' => self::AGGREGATE_CLAUSE_AGG_FUN, 'range' => self::AGGREGATE_CLAUSE_RANGE, 'maxGroup' => self::AGGREGATE_CLAUSE_MAX_GROUP, 'aggFilter' => self::AGGREGATE_CLAUSE_AGG_FILTER, 'aggSamplerThresHold' => self::AGGREGATE_CLAUSE_AGG_SAMPLER_THRESHOLD, 'aggSamplerStep' => self::AGGREGATE_CLAUSE_AGG_SAMPLER_STEP ); foreach ($this->params->aggregates as $aggregate) { if (!isset($aggregate->groupKey) || !isset($aggregate->aggFun)) { continue; } $agg = array(); foreach ($keys as $k => $v) { if (isset($aggregate->$k)) { $agg[] = Constant::get($v) . self::CLAUSE_AGGREGATE_KV_SEPARATOR . $aggregate->$k; } } $aggregates[] = implode(self::CLAUSE_AGGREGATE_SUB_SEPARATOR, $agg); } $this->clauses[self::AGGREGATE_KEY] = implode(self::CLAUSE_AGGREGATE_SEPARATOR, $aggregates); } } private function buildKVPairsClause() { if (isset($this->params->config->kvpairs)) { $this->clauses[self::KVPAIRS] = $this->params->config->kvpairs; } } public function getClausesString() { $this->buildConfigClause(); $this->buildQueryClause(); $this->buildSortClause(); $this->buildFilterClause(); $this->buildDistinctClause(); $this->buildAggregateClause(); $this->buildKVPairsClause(); $clauses = array(); foreach ($this->clauses as $clauseKey => $value) { $clauses[] = $clauseKey . self::KV_SEPARATOR . $value; } return implode(self::CLAUSE_SEPARATOR, $clauses); } }