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, new ElasticBeforeSearchEvent(['modelClass' => $modelClass, '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]); }
/** * @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, new ElasticIndexEvent(['model' => $event->model, 'index' => $index, 'sender' => $this])); if ($index) { $index->delete(); } }