public static void CreateNewEmptyIndex(Lucene.Net.Store.Directory directory) { using (IndexWriter indexWriter = CreateIndexWriter(directory, true)) { indexWriter.Commit(PackageIndexing.CreateCommitMetadata(DateTime.MinValue, 0, 0, "creation")); } }
private static void ApplyAdds(List <int> packageKeys, Func <int, IndexDocumentData> fetch, Lucene.Net.Store.Directory directory, TextWriter log, PerfEventTracker perfTracker, IEnumerable <FrameworkName> projectFxs) { log.WriteLine("ApplyAdds"); // Collect all the packages var packages = packageKeys.Select(k => fetch(k)); using (IndexWriter indexWriter = CreateIndexWriter(directory, false)) { IDictionary <string, string> commitUserData; var dirtyDocuments = new List <FacetedDocument>(); using (var reader = indexWriter.GetReader()) { commitUserData = reader.CommitUserData; foreach (var group in packages.GroupBy(p => p.Package.PackageRegistration.Id)) { var newDirtyDocs = DetermineDirtyDocuments(projectFxs, perfTracker, reader, group.Key, group); dirtyDocuments.AddRange(newDirtyDocs); } } WriteDirtyDocuments(dirtyDocuments, indexWriter, perfTracker); string lastEditsIndexTime = commitUserData["last-edits-index-time"]; if (lastEditsIndexTime == null) { // this should never happen but if it did Lucene would throw lastEditsIndexTime = DateTime.MinValue.ToString(); } log.WriteLine("Commit {0} adds", packageKeys.Count); indexWriter.Commit(PackageIndexing.CreateCommitMetadata(lastEditsIndexTime, packageKeys.Max(), packageKeys.Count, "add")); } }
private static void AddToIndex(Lucene.Net.Store.Directory directory, List <IndexDocumentData> rangeToIndex, TextWriter log, IEnumerable <FrameworkName> projectFxs, PerfEventTracker perfTracker) { log.WriteLine("begin AddToIndex"); int highestPackageKey = -1; var groups = rangeToIndex.GroupBy(d => d.Package.PackageRegistration.Id).ToList(); // Collect documents to change var dirtyDocs = new List <FacetedDocument>(); using (var reader = IndexReader.Open(directory, readOnly: true)) using (perfTracker.TrackEvent("CalculateChanges", "")) { foreach (var group in groups) { var newDirtyDocs = DetermineDirtyDocuments(projectFxs, perfTracker, reader, group.Key, group); // (Re-)Add any dirty documents to the index dirtyDocs.AddRange(newDirtyDocs); } } using (IndexWriter indexWriter = CreateIndexWriter(directory, create: false)) { WriteDirtyDocuments(dirtyDocs, indexWriter, perfTracker); highestPackageKey = rangeToIndex.Max(i => i.Package.Key); log.WriteLine("about to commit {0} packages", rangeToIndex.Count); IDictionary <string, string> commitUserData = indexWriter.GetReader().CommitUserData; string lastEditsIndexTime = commitUserData["last-edits-index-time"]; if (lastEditsIndexTime == null) { // this should never happen but if it did Lucene would throw lastEditsIndexTime = DateTime.MinValue.ToString(); } indexWriter.Commit(PackageIndexing.CreateCommitMetadata(lastEditsIndexTime, highestPackageKey, rangeToIndex.Count, "add")); log.WriteLine("commit done"); } log.WriteLine("end AddToIndex"); }