public function doc2object($doc) { $dataset = $doc['fields']['dataset'][0]; $id = $doc['fields']['id'][0]; if ($dataset == null or $id == null) { throw new InternalErrorException("Empty dataset or id: " . $dataset . ' ' . $id); } $output = array('id' => $id, 'dataset' => $dataset, 'url' => Dataobject::apiUrl($dataset, $id), 'mp_url' => Dataobject::mpUrl($dataset, $id), 'schema_url' => Dataobject::schemaUrl($dataset), 'global_id' => $doc['_id'], 'slug' => $doc['fields']['slug'][0], 'score' => $doc['_score'], 'data' => $doc['fields']['source'][0]['data']); if (@$doc['inner_hits']['collection']['hits']['total'] && @$doc['inner_hits']['collection']['hits']['hits'][0]['_source']) { $output['collection'] = $doc['inner_hits']['collection']['hits']['hits'][0]['_source']; $output['collection']['id'] = (int) $doc['inner_hits']['collection']['hits']['hits'][0]['_id']; } if (isset($doc['fields']['source'][0]['static']) && !empty($doc['fields']['source'][0]['static'])) { $output['static'] = $doc['fields']['source'][0]['static']; } if (isset($doc['fields']['source'][0]['contexts']) && !empty($doc['fields']['source'][0]['contexts'])) { $force_context = false; if (@$doc['inner_hits']['alert-data']['hits']['total'] && isset($doc['inner_hits']['alert-data']['hits']['hits'][0]['fields']['context'][0])) { $force_context = $doc['inner_hits']['alert-data']['hits']['hits'][0]['fields']['context'][0]; } $context = array(); foreach ($doc['fields']['source'][0]['contexts'] as $key => $value) { if (!$force_context || $force_context && strpos($key, $force_context) !== false) { $key_parts = explode('.', $key); $value_parts = explode("\n\r", $value); $context[] = array('creator' => array('dataset' => $key_parts[0], 'id' => $key_parts[1], 'global_id' => $value_parts[0], 'name' => $value_parts[1], 'slug' => $value_parts[2], 'url' => @$value_parts[5]), 'action' => $key_parts[2], 'label' => $value_parts[3], 'sentence' => $value_parts[4]); } } $output['contexts'] = $context; } if (isset($doc['highlight']['text']) && is_array($doc['highlight']['text']) && isset($doc['highlight']['text'][0])) { $output['highlight'] = array($doc['highlight']['text']); } if (isset($doc['inner_hits']) && isset($doc['inner_hits']['inner']) && isset($doc['inner_hits']['inner']['hits']) && isset($doc['inner_hits']['inner']['hits']['hits'])) { foreach ($doc['inner_hits']['inner']['hits']['hits'] as $hit) { $output['inner_hits'][] = array('id' => $hit['_id'], 'title' => @$hit['fields']['title'][0]); } } return $output; }