public function actionSearch() { $solr = new Solr(); $response = json_decode($solr->find(\Yii::$app->request->get('term'))); $response = $response->response->numFound != 0 ? $response->response->docs : []; return json_encode($response); }
public function search() { $ids = []; $activeDataProvider = new ActiveDataProvider(['sort' => false, 'pagination' => ['pageSize' => 10]]); $solr = new Solr(['rowsCount' => 10000]); $result = $solr->find($this->terms, ['id']); if ($result && ($result = json_decode($result))) { $this->resultsCount = $result->response->numFound; foreach ($result->response->docs as $oneResult) { $ids[] = $oneResult->id; } } $sort = null; $searchQuery = News::find()->where(['in', 'id', $ids]); if ($ids) { switch ($this->order) { case 'newest': $sort = ['defaultOrder' => ['publishDate' => SORT_DESC]]; break; case 'oldest': $sort = ['defaultOrder' => ['publishDate' => SORT_ASC]]; break; case 'popular': $sort = ['defaultOrder' => ['hits' => SORT_DESC]]; break; case 'alphabet': $sort = ['defaultOrder' => ['title' => SORT_ASC]]; break; case 'relative': default: $searchQuery->orderBy(new Expression('FIELD(`id`, ' . implode(', ', $ids) . ')')); break; } } $activeDataProvider->query = $searchQuery; if ($sort) { $activeDataProvider->setSort($sort); } return $activeDataProvider; }