示例#1
0
        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
                    });
                }
            }
        }
示例#2
0
        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));
                }
        }
示例#3
0
        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));
                }
        }