Exemple #1
0
 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);
 }
Exemple #2
0
 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;
 }