Exemple #1
0
 /**
  * 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;
 }