public IList <Document> ReadDocuments(IList <int> documentIds) { var addresses = new List <BlockInfo>(documentIds.Count); foreach (var id in documentIds) { addresses.Add(new BlockInfo(id * _blockSize, _blockSize)); } var docAddresses = _addressReader.Read(addresses); var index = 0; var documents = new List <Document>(documentIds.Count); _stream.Seek(Version.KeyIndexOffset, SeekOrigin.Begin); var keyIndex = TableSerializer.ReadKeyIndex(_stream, Version.KeyIndexSize); using (var documentReader = new DocumentReader( _stream, Version.Compression, keyIndex, leaveOpen: true)) foreach (var document in documentReader.Read(docAddresses)) { document.Id = documentIds[index++]; documents.Add(document); } return(documents); }
public DocHash Read(int docId) { var pos = docId * TableSerializer.SizeOfDocHash() + _offset; _stream.Seek(pos, SeekOrigin.Begin); var hash = TableSerializer.DeserializeDocHash(_stream); return(hash); }
public DtblStream(Stream stream, BatchInfo ix, int skip = 0, int take = int.MaxValue) : base(ix.PrimaryKeyFieldName) { _dataFile = stream; _ix = ix; _dataFile.Seek(_ix.KeyIndexOffset, SeekOrigin.Begin); var keyIndex = TableSerializer.ReadKeyIndex(_dataFile, _ix.KeyIndexSize); _hashReader = new DocHashReader(_dataFile, _ix.DocHashOffset, leaveOpen: false); _addressReader = new DocumentAddressReader(_dataFile, _ix.DocAddressesOffset); _documentReader = new DocumentReader(_dataFile, _ix.Compression, keyIndex, leaveOpen: false); _skip = skip; _take = take; }
public static BatchInfo Load(string fileName) { var time = new Stopwatch(); time.Start(); BatchInfo ix; using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) { ix = TableSerializer.DeserializeBatchInfo(fs); } Log.DebugFormat("loaded ix in {0}", time.Elapsed); return(ix); }
protected override Document Deserialize(long offset, int size, Stream stream) { stream.Seek(_offset + offset, SeekOrigin.Begin); return(TableSerializer.DeserializeDocument(stream, size, _compression, _keyIndex)); }
protected override IList <DocumentPosting> Deserialize(long offset, int size, Stream stream) { stream.Seek(offset, SeekOrigin.Begin); return(TableSerializer.DeserializePostings(stream, size)); }