public async void WriteContext_MakesDocumentsAvailable()
        {
            var config = index.Configuration;

            config
            .SetTypeResolver("Type")
            .SetAreaResolver("Area")
            .ForAll()
            .SetIdentity("Id");

            using (ILuceneWriteContext writer = index.Writer.WriteContext(1024))
            {
                await writer.Write(JObject.FromObject(new { Id = new Guid("00000000-0000-0000-0000-000000000001"), Type = "Person", Name = "John", LastName = "Doe", Area = "Foo" }));

                await writer.Write(JObject.FromObject(new { Id = new Guid("00000000-0000-0000-0000-000000000002"), Type = "Person", Name = "Peter", LastName = "Pan", Area = "Foo" }));

                await writer.Write(JObject.FromObject(new { Id = new Guid("00000000-0000-0000-0000-000000000003"), Type = "Person", Name = "Alice", Area = "Foo" }));

                await writer.Write(JObject.FromObject(new { Id = new Guid("00000000-0000-0000-0000-000000000004"), Type = "Car", Brand = "Ford", Model = "Mustang", Number = 5, Area = "Foo" }));

                await writer.Write(JObject.FromObject(new { Id = new Guid("00000000-0000-0000-0000-000000000005"), Type = "Car", Brand = "Dodge", Model = "Charger", Number = 10, Area = "Foo" }));

                await writer.Write(JObject.FromObject(new { Id = new Guid("00000000-0000-0000-0000-000000000006"), Type = "Car", Brand = "Chevrolet", Model = "Camaro", Number = 15, Area = "Foo" }));

                await writer.Write(JObject.FromObject(new { Id = new Guid("00000000-0000-0000-0000-000000000007"), Type = "Flower", Name = "Lilly", Meaning = "Majesty", Number = 5, Area = "Foo" }));

                await writer.Write(JObject.FromObject(new { Id = new Guid("00000000-0000-0000-0000-000000000008"), Type = "Flower", Name = "Freesia", Meaning = "Innocence", Number = 10, Area = "Foo" }));

                await writer.Write(JObject.FromObject(new { Id = new Guid("00000000-0000-0000-0000-000000000009"), Type = "Flower", Name = "Aster", Meaning = "Patience", Number = 15, Area = "Foo" }));
            }

            Assert.That(index.Search("*").Count(), Is.EqualTo(9));
        }
Example #2
0
        public async Task Reset(ILuceneWriteContext writer, long generation, IProgress <StorageIndexChangeLogWatcherInitializationProgress> progress = null)
        {
            //TODO: This method is almost identical to the one above except for a few things that could be parameterized.
            progress = progress ?? new Progress <StorageIndexChangeLogWatcherInitializationProgress>();

            log.Get(generation, true, 0); //NOTE: Reset to the generation but don't fetch any changes yet.
            long latest = log.LatestGeneration;

            progress.Report(new StorageIndexChangeLogWatcherInitializationProgress(area, new ChangeCount(0, 0, 0), generation, latest, false));

            await Task.Run(async() =>
            {
                while (true)
                {
                    IStorageChangeCollection changes = log.Get(true, batch);
                    if (changes.Count < 1)
                    {
                        progress.Report(new StorageIndexChangeLogWatcherInitializationProgress(area, changes.Count, changes.Generation, latest, true));
                        return;
                    }

                    await writer.WriteAll(changes.Created.Select(change => change.CreateEntity()));
                    await writer.WriteAll(changes.Updated.Select(change => change.CreateEntity()));
                    await writer.DeleteAll(changes.Deleted.Select(change => change.CreateEntity()));

                    progress.Report(new StorageIndexChangeLogWatcherInitializationProgress(area, changes.Count, changes.Generation, latest, false));
                }
            });
        }
        public async Task Generation(string area, long gen, IProgress <StorageIndexChangeLogWatcherInitializationProgress> progress = null)
        {
            if (!watchers.ContainsKey(area))
            {
                return;
            }

            using (ILuceneWriteContext writer = index.Writer.WriteContext(buffer))
            {
                if (debugging)
                {
                    writer.InfoEvent += (sender, args) => logger.Log("indexdebug", Severity.Critical, args.Message, new { args });
                }

                await watchers[area].Reset(writer, gen, progress);
            }
        }
        private void InitializeIndex()
        {
            //IndexWriter w = index.Storage.GetWriter(index.Analyzer);
            StorageIndexManagerInitializationProgressTracker initTracker = new StorageIndexManagerInitializationProgressTracker(watchers.Keys.Select(k => k));

            using (ILuceneWriteContext writer = index.Writer.WriteContext(buffer))
            {
                if (debugging)
                {
                    writer.InfoEvent += (sender, args) => logger.Log("indexdebug", Severity.Critical, args.Message, new { args });
                }

                Sync.Await(watchers.Values.Select(watcher => watcher
                                                  .Initialize(writer, new Progress <StorageIndexChangeLogWatcherInitializationProgress>(
                                                                  progress => tracker.SetProgress($"{initTracker.Capture(progress)}")))));
            }
            OnIndexInitialized(new IndexInitializedEventArgs());
        }
        public async Task ResetIndex()
        {
            Stop();
            index.Storage.Purge();

            StorageIndexManagerInitializationProgressTracker initTracker = new StorageIndexManagerInitializationProgressTracker(watchers.Keys.Select(k => k));

            using (ILuceneWriteContext writer = index.Writer.WriteContext(buffer))
            {
                if (debugging)
                {
                    writer.InfoEvent += (sender, args) => logger.Log("indexdebug", Severity.Critical, args.Message, new { args });
                }

                await Task.WhenAll(watchers.Values.Select(watcher => watcher.Reset(writer, 0, new Progress <StorageIndexChangeLogWatcherInitializationProgress>(
                                                                                       progress => tracker.SetProgress($"{initTracker.Capture(progress)}")))));
            }
            OnIndexReset(new IndexResetEventArgs());
            task = scheduler.ScheduleTask("ChangeLogWatcher", b => UpdateIndex(), interval);
        }
Example #6
0
        public async Task Initialize(ILuceneWriteContext writer, IProgress <StorageIndexChangeLogWatcherInitializationProgress> progress = null)
        {
            progress = progress ?? new Progress <StorageIndexChangeLogWatcherInitializationProgress>();
            await Task.Run(async() =>
            {
                long latest = log.LatestGeneration;
                while (true)
                {
                    IStorageChangeCollection changes = log.Get(false, batch);
                    if (changes.Count < 1)
                    {
                        progress.Report(new StorageIndexChangeLogWatcherInitializationProgress(area, changes.Count, changes.Generation, latest, true));
                        return;
                    }
                    await writer.WriteAll(changes.Partitioned.Select(change => change.CreateEntity()));

                    progress.Report(new StorageIndexChangeLogWatcherInitializationProgress(area, changes.Count, changes.Generation, latest, false));
                }
            });
        }