public function applySorting($sorting) { $this->ensureNotExecuted(); foreach ($sorting as $field => $order) { if (is_numeric($field)) { $field = $order; $order = 'asc'; } $this->selectQuery->addSort($field, $order); } }
/** * Checks that $sortString is well-formatted and adds the sort conidition * defined by it to $query. * Adds feedback about invalid sort string format to the page. * * @param string $sortString * @param $query */ protected function addSortStringForQuery($sortString) { if (!empty($sortString)) { $sortCriteria = explode(',', $sortString); foreach ($sortCriteria as $sortCriterion) { $sortCriterionParts = explode(' ', $sortCriterion); if (count($sortCriterionParts) === 2) { $sortDirection = Query::SORT_ASC; if ($sortCriterionParts[1] === 'desc') { $sortDirection = Query::SORT_DESC; } else { if ($sortCriterionParts[1] !== 'asc') { $message = sprintf('find: sort criterion »%s«’s sort direction is »%s« It should be »asc« or »desc«. Ignoring it.', $sortCriterion, $sortCriterionParts[1]); LoggerUtility::logWarning($message); continue; } } $this->query->addSort($sortCriterionParts[0], $sortDirection); } else { $message = sprintf('find: sort criterion »%s« does not have the required form »fieldName [asc|desc]«. Ignoring it.', $sortCriterion); LoggerUtility::logWarning($message); } } } }
public function testAddSort() { $this->query->addSort('field1', Query::SORT_DESC); $this->assertEquals(array('field1' => Query::SORT_DESC), $this->query->getSorts()); }
/** * Add sort field to the solarium query * * @param Query $solarium_query * @param string $sort_field_name */ private function add_sort_field(Query $solarium_query, $sort_field_name = self::SORT_CODE_BY_RELEVANCY_DESC) { switch ($sort_field_name) { case self::SORT_CODE_BY_DATE_DESC: $solarium_query->addSort(WpSolrSchema::_FIELD_NAME_DATE, $solarium_query::SORT_DESC); break; case self::SORT_CODE_BY_DATE_ASC: $solarium_query->addSort(WpSolrSchema::_FIELD_NAME_DATE, $solarium_query::SORT_ASC); break; case self::SORT_CODE_BY_NUMBER_COMMENTS_DESC: $solarium_query->addSort(WpSolrSchema::_FIELD_NAME_NUMBER_OF_COMMENTS, $solarium_query::SORT_DESC); break; case self::SORT_CODE_BY_NUMBER_COMMENTS_ASC: $solarium_query->addSort(WpSolrSchema::_FIELD_NAME_NUMBER_OF_COMMENTS, $solarium_query::SORT_ASC); break; case self::SORT_CODE_BY_RELEVANCY_DESC: default: // None is relevancy by default break; } }
public function setSorts(Query $solarium_query, QueryInterface $query, $field_names_single_value = array()) { foreach ($query->getSorts() as $field => $order) { $f = $field_names_single_value[$field]; if (substr($f, 0, 3) == 'ss_') { $f = 'sort_' . substr($f, 3); } $solarium_query->addSort($f, strtolower($order)); } }
/** * Add sort field to the solarium query * * @param Query $solarium_query * @param string $sort_field_name */ private function add_sort_field(Query $solarium_query, $sort_field_name = self::SORT_CODE_BY_RELEVANCY_DESC) { switch ($sort_field_name) { case self::SORT_CODE_BY_DATE_DESC: $solarium_query->addSort(WpSolrSchema::_FIELD_NAME_DATE, $solarium_query::SORT_DESC); break; case self::SORT_CODE_BY_DATE_ASC: $solarium_query->addSort(WpSolrSchema::_FIELD_NAME_DATE, $solarium_query::SORT_ASC); break; case self::SORT_CODE_BY_NUMBER_COMMENTS_DESC: $solarium_query->addSort(WpSolrSchema::_FIELD_NAME_NUMBER_OF_COMMENTS, $solarium_query::SORT_DESC); break; case self::SORT_CODE_BY_NUMBER_COMMENTS_ASC: $solarium_query->addSort(WpSolrSchema::_FIELD_NAME_NUMBER_OF_COMMENTS, $solarium_query::SORT_ASC); break; case self::SORT_CODE_BY_RELEVANCY_DESC: default: // None is relevancy by default break; } // Let a chance to add custom sort options $solarium_query = apply_filters(WpSolrFilters::WPSOLR_FILTER_SORT, $solarium_query, $sort_field_name); }
public function testSelectUrlWithSortAndFilters() { $this->query->addSort('id', Query::SORT_ASC); $this->query->addSort('name', Query::SORT_DESC); $this->query->addFilterQuery(new FilterQuery(array('key' => 'f1', 'query' => 'published:true'))); $this->query->addFilterQuery(new FilterQuery(array('key' => 'f2', 'tag' => array('t1', 't2'), 'query' => 'category:23'))); $request = $this->builder->build($this->query); $this->assertEquals(null, $request->getRawData()); $this->assertEquals('select?omitHeader=true&wt=json&json.nl=flat&q=*:*&start=0&rows=10&fl=*,score&sort=id asc,name desc' . '&fq=published:true&fq={!tag=t1,t2}category:23', urldecode($request->getUri())); }