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)); }
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); }
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)); } }); }