protected function launch()
 {
     $query = Index::find();
     if (empty($this->models)) {
         $this->models = array_keys(self::models());
     }
     // ищем только по тем моделям которые в списке
     $this->filters[] = ['terms' => ['model_class' => $this->models]];
     // ивент на модификацию фильтров ($this->filters) сторонними модулями
     foreach ($this->models as $modelClass) {
         ModuleEvent::trigger(self::EVENT_BEFORE_SEARCH . $modelClass, new ElasticBeforeSearchEvent(['query' => $query, 'sender' => $this]));
     }
     $query->query = ['filtered' => ['filter' => ['and' => ['filters' => $this->filters]]]];
     if (!empty($this->query)) {
         $query->query['filtered']['query']['multi_match'] = ['query' => $this->query, 'fields' => ['title', 'content', 'tags']];
     }
     $query->highlight = $this->highlight;
     echo $this->render($this->layout, ['dataProvider' => new ActiveDataProvider(['query' => $query, 'pagination' => ['pageSize' => $this->pageSize]]), 'itemLayout' => $this->itemLayout]);
 }
예제 #2
0
 /**
  * @inheritdoc
  */
 public function deletePage($event)
 {
     $index = Index::find()->where(['model_id' => $event->model->getPrimaryKey(), 'model_class' => $event->model->className()])->one();
     ModuleEvent::trigger(self::EVENT_BEFORE_DELETE_INDEX . $event->model->className(), new ElasticIndexEvent(['model' => $event->model, 'index' => $index, 'sender' => $this]));
     if ($index) {
         $index->delete();
     }
 }