private IEnumerable <ScoredDocument> GetDocs(IList <DocumentScore> scores, IxInfo ix) { var docAddressFileName = Path.Combine(_directory, ix.VersionId + ".da"); IList <BlockInfo> docAdrs; using (var docAddressReader = new DocumentAddressReader( new FileStream(docAddressFileName, FileMode.Open, FileAccess.Read, FileShare.Read, 4096 * 1, FileOptions.SequentialScan))) { var adrs = scores .Select(s => new BlockInfo(s.DocumentId * _blockSize, _blockSize)) .OrderBy(b => b.Position) .ToList(); docAdrs = docAddressReader.Get(adrs).ToList(); } var docFileName = Path.Combine(_directory, ix.VersionId + ".rdoc"); using (var docReader = new DocumentReader( new FileStream(docFileName, FileMode.Open, FileAccess.Read, FileShare.Read, 4096 * 4, FileOptions.SequentialScan), (Compression)ix.Compression)) { var dic = scores.ToDictionary(x => x.DocumentId, y => y.Score); foreach (var doc in docReader.Get(docAdrs)) { var score = dic[doc.Id]; yield return(new ScoredDocument { Document = doc, Score = score }); } } }
public void Can_read() { var docs = new List <Document> { new Document(new Dictionary <string, string> { { "title", "rambo" }, { "_id", "0" } }), new Document(new Dictionary <string, string> { { "title", "rocky" }, { "_id", "1" } }), new Document(new Dictionary <string, string> { { "title", "rocky 2" }, { "_id", "2" } }) }; var fileName = Path.Combine(Setup.Dir, "DocumentReaderTests.Can_read"); var blocks = new Dictionary <int, BlockInfo>(); using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write)) using (var writer = new DocumentWriter(fs)) { var index = 0; foreach (var doc in docs) { doc.Id = index++; blocks.Add(doc.Id, writer.Write(doc)); } } using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) using (var reader = new DocumentReader(fs)) { var doc = reader.Get(new[] { blocks[2] }); Assert.That(doc.First().Id, Is.EqualTo(2)); } using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) using (var reader = new DocumentReader(fs)) { var doc = reader.Get(new[] { blocks[1] }); Assert.That(doc.First().Id, Is.EqualTo(1)); } using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) using (var reader = new DocumentReader(fs)) { var doc = reader.Get(new[] { blocks[0] }); Assert.That(doc.First().Id, Is.EqualTo(0)); } using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) using (var reader = new DocumentReader(fs)) { var ds = reader.Get(blocks.Values.OrderBy(b => b.Position)).ToList(); Assert.That(docs.Count, Is.EqualTo(3)); Assert.IsTrue(ds.Any(d => d.Id == 0)); Assert.IsTrue(ds.Any(d => d.Id == 1)); Assert.IsTrue(ds.Any(d => d.Id == 2)); } }
public void Can_read() { var docs = new List <Document> { new Document(0, new List <Field> { new Field(0, "title", "rambo"), new Field(0, "_id", "0") }), new Document(1, new List <Field> { new Field(1, "title", "rocky"), new Field(1, "_id", "1") }), new Document(2, new List <Field> { new Field(2, "title", "rocky 2"), new Field(2, "_id", "2") }) }; var fileName = Path.Combine(Dir, "DocumentReaderTests.Can_read"); var blocks = new Dictionary <int, BlockInfo>(); using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write)) using (var writer = new DocumentWriter(fs, Compression.GZip)) { foreach (var doc in docs) { blocks.Add(doc.Id, writer.Write(doc)); } } using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) using (var reader = new DocumentReader(fs, Compression.GZip)) { var doc = reader.Get(new[] { blocks[2] }); Assert.AreEqual(2, doc.First().Id); } using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) using (var reader = new DocumentReader(fs, Compression.GZip)) { var doc = reader.Get(new[] { blocks[1] }); Assert.AreEqual(1, doc.First().Id); } using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) using (var reader = new DocumentReader(fs, Compression.GZip)) { var doc = reader.Get(new[] { blocks[0] }); Assert.AreEqual(0, doc.First().Id); } using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) using (var reader = new DocumentReader(fs, Compression.GZip)) { var ds = reader.Get(blocks.Values.OrderBy(b => b.Position).ToList()).ToList(); Assert.AreEqual(3, docs.Count); Assert.IsTrue(ds.Any(d => d.Id == 0)); Assert.IsTrue(ds.Any(d => d.Id == 1)); Assert.IsTrue(ds.Any(d => d.Id == 2)); } }