/** * Creates the Index on the elasticsearch server itself, first dropping if it already * exists. */ public static function create_index() { $esclient = PluginSearchElasticsearch::make_client(); $elasticaIndex = $esclient->getIndex(PluginSearchElasticsearch::get_write_indexname()); // Create the index, deleting it first if it already exists $elasticaIndex->create(array('analysis' => array('analyzer' => array('mahara_analyzer' => array('type' => 'custom', 'tokenizer' => 'pattern', 'filter' => array('standard', 'lowercase', 'stop', 'maharaSnowball'), 'char_filter' => array('maharaHtml'))), 'filter' => array('maharaSnowball' => array('type' => 'snowball', 'language' => 'English')), 'char_filter' => array('maharaHtml' => array('type' => 'html_strip', 'read_ahead' => '1024')))), true); }
/** * Get views linked to a particular artefact, applying ACL * This is used to display the list of views in an artefact result, because it's faster to retrieve the info * from Elastic search that running the SQL query. */ public static function views_by_artefact_acl_filter($views = array()) { global $USER; $ret = array(); $elasticaClient = PluginSearchElasticsearch::make_client(); $elasticaIndex = $elasticaClient->getIndex(get_config_plugin('search', 'elasticsearch', 'indexname')); $elasticaQuery = new \Elastica\Query(); // check user access to the views $elasticaFilterAnd = new \Elastica\Filter\BoolAnd(); $elasticaFilterType = new \Elastica\Filter\Term(array('_type' => 'view')); $elasticaFilterAnd->addFilter($elasticaFilterType); $elasticaFilterIds = new \Elastica\Filter\Terms('id', array_keys($views)); $elasticaFilterAnd->addFilter($elasticaFilterIds); // Apply ACL filters $elasticaFilterACL = new ElasticsearchFilterAcl($USER); $elasticaFilterAnd->addFilter($elasticaFilterACL); $elasticaFilteredQuery = new \Elastica\Query\Filtered(null, $elasticaFilterAnd); $elasticaQuery->setQuery($elasticaFilteredQuery); $elasticaResultSet = $elasticaIndex->search($elasticaQuery); $elasticaResults = $elasticaResultSet->getResults(); foreach ($elasticaResults as $elasticaResult) { $data = $elasticaResult->getData(); $ret[$data['id']] = $views[$data['id']]; } return $ret; }