public Index(string directory, IEnumerable <Field> mapping) { _mapping = FieldMapper.Create(mapping); _termFields = FieldMapper.GetTermFields(mapping); var analyzerMap = mapping .Where(x => !string.IsNullOrEmpty(x.SpecificAnalyzer)) .ToDictionary(x => x.Name, x => x.SpecificAnalyzer); IDisposable d; (_analyzer, d) = PerFieldAnalyzer.Create("StandardAnalyzer", analyzerMap); _dir = DirectoryProvider.Create(directory); _sm = new Lazy <SearcherManager>(() => new SearcherManager(_dir, null), true); _disposable = new DelegateDisposable(() => { d.Dispose(); _writer?.Dispose(); _writer = null; if (_sm.IsValueCreated) { _sm.Value.Dispose(); } _dir.Dispose(); }); }
public void Copy(string dest) { var destDir = DirectoryProvider.Create(dest); var policy = (SnapshotDeletionPolicy)Writer.Config.IndexDeletionPolicy; var commit = policy.Snapshot(); try { foreach (var file in commit.FileNames) { _dir.Copy(destDir, file, file, IOContext.READ_ONCE); } } finally { policy.Release(commit); Writer.DeleteUnusedFiles(); } }