public static function hydrate(array $hit, $position)
 {
     $data = $hit['_source'];
     $highlight = isset($hit['highlight']) ? $hit['highlight'] : [];
     // Strip field prefix
     $private_prefix = 'private_';
     $prefix = 'caption.';
     foreach ($highlight as $key => $value) {
         unset($highlight[$key]);
         if (substr($key, 0, strlen($private_prefix)) === $private_prefix) {
             $key = substr($key, strlen($private_prefix));
         }
         if (substr($key, 0, strlen($prefix)) == $prefix) {
             $key = substr($key, strlen($prefix));
         }
         $highlight[$key] = $value;
     }
     $record = new ElasticsearchRecord();
     $record->setPosition($position);
     $record->setBaseId(igorw\get_in($data, ['base_id'], 0));
     $record->setCollectionName(igorw\get_in($data, ['collection_name'], null));
     $record->setCollectionId(igorw\get_in($data, ['collection_id'], 0));
     $createdOn = igorw\get_in($data, ['created_on']);
     $record->setCreated($createdOn ? new \DateTime($createdOn) : $createdOn);
     $record->setDataboxId(igorw\get_in($data, ['databox_id'], 0));
     $record->setIsStory(igorw\get_in($data, ['record_type']) === 'story');
     $record->setMimeType(igorw\get_in($data, ['mime'], 'application/octet-stream'));
     $record->setOriginalName(igorw\get_in($data, ['original_name'], ''));
     $record->setRecordId(igorw\get_in($data, ['record_id'], 0));
     $record->setSha256(igorw\get_in($data, ['sha256'], ''));
     $record->setType(igorw\get_in($data, ['type'], 'unknown'));
     $updatedOn = igorw\get_in($data, ['updated_on']);
     $record->setUpdated($updatedOn ? new \DateTime($updatedOn) : $updatedOn);
     $record->setUuid(igorw\get_in($data, ['uuid'], ''));
     $record->setStatusBitField(igorw\get_in($data, ['flags_bitfield'], 0));
     $record->setTitles((array) igorw\get_in($data, ['title'], []));
     $record->setCaption((array) igorw\get_in($data, ['caption'], []));
     $record->setPrivateCaption((array) igorw\get_in($data, ['private_caption'], []));
     $record->setExif((array) igorw\get_in($data, ['exif'], []));
     $record->setSubdefs((array) igorw\get_in($data, ['subdefs'], []));
     $record->setFlags((array) igorw\get_in($data, ['flags'], []));
     $record->setHighlight((array) $highlight);
     return $record;
 }
 /**
  * @param \record_adapter $record
  * @return \Alchemy\Phrasea\Application
  */
 protected function mockElasticsearchResult(\record_adapter $record)
 {
     $app = $this->getApplication();
     $elasticsearchRecord = new ElasticsearchRecord();
     $elasticsearchRecord->setDataboxId($record->get_sbas_id());
     $elasticsearchRecord->setRecordId($record->get_record_id());
     $result = new SearchEngineResult(new ArrayCollection([$elasticsearchRecord]), '', 0, 0, 1, 1, 0, 0, new ArrayCollection(), null, null);
     $searchEngine = $this->prophesize(SearchEngineInterface::class);
     $searchEngine->query('', 0, Argument::any(), Argument::any())->willReturn($result);
     $searchEngine->excerpt(Argument::any(), Argument::any(), Argument::any(), Argument::any())->willReturn([]);
     $app['search_engine'] = $searchEngine->reveal();
     return $app;
 }