/** * @param string $string * * @return AbstractSort[] */ public function buildSortFromString($string) { $sorts = []; if (!empty($string)) { $sortBuilder = new SortBuilder(); foreach ($this->parse($string) as $item) { /* * Position map: * - 0 = field name * - 1 = order (asc/desc) * - 2 = mode (min/max/sum/avg/median) */ if (isset($item[0])) { if ($item[0] === '_score') { $sort = $sortBuilder->createScoreSort(); } elseif ($item[0] === '_doc') { $sort = $sortBuilder->createDocSort(); } else { $sort = $sortBuilder->createFieldSort()->setField($item[0]); } if (isset($item[1])) { $sort->setOrder($item[1]); } if (isset($item[2])) { $sort->setMode($item[2]); } $sorts[] = $sort; } } } return $sorts; }
/** * Tests the Doc sort format. */ public function testSortFormat() { $this->specify('doc sort was created', function () { $sort = $this->sortBuilder->createDocSort(); verify($sort)->isInstanceOf('\\Nord\\Lumen\\Elasticsearch\\Search\\Sort\\DocSort'); }); $this->specify('doc sort format', function () { $sort = $this->sortBuilder->createDocSort(); $array = $sort->toArray(); verify($array)->equals('_doc'); }); $this->specify('doc sort format with order', function () { $sort = $this->sortBuilder->createDocSort(); $sort->setOrder('asc'); $array = $sort->toArray(); verify($array)->equals(['_doc' => ['order' => 'asc']]); }); }