public function search($alias, $queryData = array())
 {
     $dataset = $this->find('first', array('conditions' => array('Dataset.alias' => $alias), 'full' => 1));
     $__fields = array('_date', '_title', '_weight');
     $__orders = $__fields;
     $_fields = $__fields;
     foreach (array_column($dataset['fields'], 'fields') as $field) {
         $_field = $field['field'];
         if ($field['alias'] == $alias) {
             $_fields[] = $_field;
         }
         $_fields[] = $field['alias'] . '.' . $_field;
     }
     reset($field);
     foreach (array_column($dataset['orders_es'], 'sorting') as $field) {
         $_field = $field['field'];
         $__orders[] = $_field;
         $__orders[] = $alias . '.' . $_field;
     }
     $requested_fields = array();
     // debug( $_fields ); die();
     if (isset($queryData['fields']) && !empty($queryData['fields'])) {
         foreach ($queryData['fields'] as $field) {
             if (strpos($field, '.') === false) {
                 $field = $alias . '.' . $field;
             }
             if (in_array($field, $_fields)) {
                 $requested_fields[] = 'data.' . $field;
             } elseif ($field == 'sejm_wystapienia.data') {
                 // TEMP HACK
                 $requested_fields[] = 'data.' . $field;
             }
         }
     }
     // debug( $requested_fields ); die();
     $virtual_fields = $dataset['virtual_fields'];
     $filters = array('dataset' => $alias);
     $switchers = array();
     $facets = array();
     $order = array();
     $q = false;
     $mode = isset($queryData['mode']) && $queryData['mode'] ? $queryData['mode'] : null;
     $do_facets = isset($queryData['facets']) && $queryData['facets'] ? true : false;
     $limit = isset($queryData['limit']) && $queryData['limit'] ? $queryData['limit'] : 20;
     $page = isset($queryData['page']) && $queryData['page'] ? $queryData['page'] : 1;
     $version = isset($dataset['Dataset']['version']) && $dataset['Dataset']['version'] ? $dataset['Dataset']['version'] : false;
     if (isset($queryData['conditions']) && is_array($queryData['conditions'])) {
         foreach ($queryData['conditions'] as $key => $value) {
             if (in_array($key, array('page', 'limit'))) {
                 continue;
             }
             if ($key[0] == '!') {
                 $switchers[substr($key, 1)] = $value;
             } elseif ($key == 'q') {
                 $q = $value;
             } elseif (in_array($key, $_fields)) {
                 if (!in_array($key, $__fields) && strpos($key, '.') === false) {
                     $key = $alias . '.' . $key;
                 }
                 $filters[$key] = $value;
             } elseif ($key == '_source') {
                 $filters[$key] = $value;
             }
         }
     }
     if (isset($queryData['q'])) {
         $q = $queryData['q'];
     }
     if (!empty($switchers)) {
         $dataset_switchers_exp_dict = array_column($dataset['switchers'], 'switcher');
         $dataset_switchers_exp_dict = array_column($dataset_switchers_exp_dict, 'filters', 'name');
         foreach ($switchers as $key => $value) {
             if ($_filters = $dataset_switchers_exp_dict[$key]) {
                 if (!empty($_filters[0])) {
                     foreach ($_filters[0] as $_k => $_v) {
                         if (strpos($_k, '.') === false) {
                             $_k = $alias . '.' . $_k;
                         }
                         $filters[$_k] = $_v;
                     }
                 }
                 /*
                 if( $parts = explode(':', $exp) ) {
                 	
                 	if( stripos($parts[0], '_data_') === 0 )
                 		$parts[0] = substr($parts[0] , 6);
                 		
                 	$filters[ $parts[0] ] = array($parts[1], false);
                 	
                 }
                 */
             }
         }
     }
     if ($do_facets) {
         $facets_dict = array();
         if (isset($dataset['filters'])) {
             foreach ($dataset['filters'] as $filter) {
                 if (($filter = $filter['filter']) && in_array($filter['typ_id'], array(1, 2))) {
                     if (strpos($filter['field'], '.') === false) {
                         $filter['field'] = $alias . '.' . $filter['field'];
                     }
                     $facets[] = $filter['field'];
                     $facets_dict[$filter['field']] = $filter;
                 }
             }
         }
     }
     $_order = array();
     if (isset($queryData['order']) && $queryData['order']) {
         $order = $queryData['order'];
     }
     if (is_string($order)) {
         $order = array($order);
     }
     foreach ($order as $o) {
         $_field = $o;
         if ($p = strpos($o, ' ')) {
             $_field = substr($o, 0, $p);
         }
         if (in_array($_field, $_fields) && (in_array($_field, $__orders) || mpapi_get_field_type($_field) != 'string')) {
             if (!in_array($_field, $__fields) && strpos($_field, '.') === false) {
                 $o = $alias . '.' . $o;
             }
             $_order[] = $o;
         }
     }
     App::import('model', 'Dane.Dataobject');
     $this->Dataobject = new Dataobject();
     $search = $this->Dataobject->find('all', array('q' => $q, 'mode' => $mode, 'filters' => $filters, 'facets' => $facets, 'order' => $_order, 'limit' => $limit, 'page' => $page, 'version' => $version, 'fields' => $requested_fields));
     if (isset($search['facets'])) {
         App::import('model', 'DB');
         $this->DB = new DB();
         $facets = array();
         foreach ($search['facets'] as $field => $buckets) {
             $filter = $facets_dict[$field];
             $buckets = $buckets[0];
             $options = array();
             if ($filter['typ_id'] == '1') {
                 $ids = array();
                 foreach ($buckets as $b) {
                     if ($b['key'] && $b['doc_count']) {
                         $ids[] = $b['key'];
                     }
                 }
                 if (isset($filter['params']['table'])) {
                     $id_field = isset($filter['params']['id_field']) ? $filter['params']['id_field'] : 'id';
                     $title_field = isset($filter['params']['title_field']) ? $filter['params']['title_field'] : 'nazwa';
                     $table = $filter['params']['table'];
                     $data = $this->DB->selectAssocs("SELECT `{$id_field}` as 'id', `{$title_field}` as 'label' FROM `{$table}` WHERE `{$id_field}`='" . implode("' OR `{$id_field}`='", $ids) . "'");
                     $data = array_column($data, 'label', 'id');
                     foreach ($buckets as $b) {
                         $options[] = array('id' => $b['key'], 'count' => $b['doc_count'], 'label' => array_key_exists($b['key'], $data) ? $data[$b['key']] : ' - ');
                     }
                     $filter['params'] = array('options' => $options);
                 }
             } elseif ($filter['typ_id'] == '2') {
                 $data = array_column($buckets, 'doc_count', 'key');
                 for ($i = 0; $i < count($filter['params']['options']); $i++) {
                     $filter['params']['options'][$i]['count'] = @$data[strtolower($filter['params']['options'][$i]['id'])];
                 }
             }
             $facets[] = $filter;
         }
         $search['facets'] = $facets;
     }
     return $search;
 }
 $properties = array();
 // get fields based on sample object
 $sample_object = file_get_contents($api_root . 'dane/' . $slug . '?limit=1');
 $sample_object = json_decode($sample_object, true);
 $sample_object = $sample_object['Dataobject'][0];
 $sample_object = file_get_contents($api_root . 'dane/' . $slug . '/' . $sample_object['id'] . '?layers=*');
 $sample_object = json_decode($sample_object, true);
 file_put_contents($output_directory . $slug . '_example.json', json_format($sample_object));
 foreach ($sample_object['data'] as $field => $v) {
     list($dataset, $fld) = preg_split('/\\./', $field);
     if ($dataset == null or $fld == null) {
         throw new Exception("Wrong field format " . $field);
     }
     $fdef = array('type' => 'string', 'description' => 'TODO');
     // guess type, @see Vendor/functions.php
     $estype = mpapi_get_field_type($fld);
     switch ($estype) {
         case 'date':
             $fdef['type'] = 'string';
             $fdef['format'] = 'date-time';
             break;
         case 'bigint':
         case 'int':
             $fdef['type'] = 'integer';
             break;
         case 'float':
             $fdef['type'] = 'number';
             break;
     }
     $properties[$field] = $fdef;
 }