private FSDirectory createKeywordsFrom(CardRepository repository) { if (!repository.IsLoadingComplete) { throw new InvalidOperationException($"{nameof(CardRepository)} must be loaded first"); } var keywordsList = new List <CardKeywords>(repository.Cards.Count); foreach (var set in repository.SetsByCode.Values) { if (!FilterSet(set)) { continue; } var setKeywords = new CardKeywords[set.Cards.Count]; IndexUtils.For(0, set.Cards.Count, i => setKeywords[i] = set.Cards[i].GetAllKeywords()); keywordsList.AddRange(setKeywords); SetsCount++; LoadingProgress?.Invoke(); } _version.CreateDirectory(); var fsIndex = FSDirectory.Open(_version.Directory); var indexWriterConfig = IndexUtils.CreateWriterConfig(new LowercaseKeywordAnalyzer()); using (var writer = new IndexWriter(fsIndex, indexWriterConfig)) { IndexUtils.ForEach(keywordsList, keyword => { var doc = keyword.ToDocument(); // ReSharper disable once AccessToDisposedClosure writer.AddDocument(doc); }); } _version.SetIsUpToDate(); return(fsIndex); }
public CardKeywords GetAllKeywords() => _keywords ?? (_keywords = new CardKeywords(this));