protected virtual void Dispose(bool disposing) { if (!_disposedValue) { if (disposing) { // dispose managed state (managed objects). FulltextBackgroundTaskExecutor.WaitForAllCurrentTasksToFinish(5000); FulltextBackgroundTaskExecutor.Dispose(); Storage?.Dispose(); SearchEngine?.Dispose(); } // free unmanaged resources (unmanaged objects) and override a finalizer below. // set large fields to null. _disposedValue = true; } }
public static NoteStorage CreateStandard(LiteDatabase database, string rootDirectoryPath, bool updateLastUpdateAutomatically = false) { Check.DoRequireArgumentNotNull(database, nameof(database)); Check.DoRequireArgumentNotNull(rootDirectoryPath, nameof(rootDirectoryPath)); var fulltextPath = Path.Combine(rootDirectoryPath, "ft"); Directory.CreateDirectory(fulltextPath); var luceneAdapter = new LuceneNoteAdapter(); var storage = new LiteDbStorage <Note>(database, new NoteAdapter(updateLastUpdateAutomatically)); var multiIndex = new MultiIndex(luceneAdapter.DocumentKeyName); var searchEngine = new SearchEngine <Note, INoteHeader, string>(fulltextPath, luceneAdapter, multiIndex); var result = new NoteStorage(storage, searchEngine) { RootPath = rootDirectoryPath }; return(result); }
public TDoc Delete(TKey id) { var result = Storage.Delete(id); FulltextBackgroundTaskExecutor.Schedule(() => { if (EntityAdapter.CanConvertStorageKey) { SearchEngine.Delete(EntityAdapter.GetFulltextFromStorageKey(id)); } else if (result != null) { SearchEngine.Delete(EntityAdapter.GetFulltextKey(result)); } if (EntityAdapter.CanConvertStorageKey || result != null) { SearchEngine.CommitFulltextIndex(); } }); return(result); }
public void OpenOrCreateIndexes(IEnumerable <string> stemmerNames, Action <double> progressReporter = null) { Check.DoRequireArgumentNotNull(stemmerNames, nameof(stemmerNames)); var languageNames = stemmerNames.ToCaseInsensitiveSet(); var allSupportedLangs = LuceneIndex.GetAvailableSnowballStemmers().ToCaseInsensitiveSet(); var unknownLangs = string.Join(",", languageNames.Where(n => !allSupportedLangs.Contains(n))); if (!string.IsNullOrEmpty(unknownLangs)) { throw new FulltextException($"The following configured languages are not supported: {unknownLangs}"); } var newIndexes = new List <IndexInformation>(); foreach (var stemmerName in stemmerNames) { var info = SearchEngine.AddOrOpenSnowballIndex(stemmerName); if (info.IsNew) { newIndexes.Add(info); } } if (languageNames.Count > 1) { SearchEngine.SetDefaultIndex(stemmerNames.First()); } if (newIndexes.Count > 0) { RebuildIndexes(newIndexes.Select(x => x.Name).ToArray(), progressReporter); } }
public void SetDefaultIndex(string stemmerName) { SearchEngine.SetDefaultIndex(stemmerName); }
public void RemoveIndex(string stemmerName) { SearchEngine.RemoveIndex(stemmerName); }
/// <inheritdoc /> public IList <THeader> SearchInPeriod(DateTime?periodStart, DateTime?periodEnd, string queryText, int maxResults, SearchableDocumentTime searchableDocumentTime = SearchableDocumentTime.LastUpdate) { return(SearchEngine.SearchInPeriod(periodStart, periodEnd, queryText, maxResults, searchableDocumentTime)); }
/// <inheritdoc /> public IList <THeader> GetTopInPeriod(DateTime?periodStart, DateTime?periodEnd, int maxResults, SearchableDocumentTime searchableDocumentTime = SearchableDocumentTime.LastUpdate) { return(SearchEngine.GetTopInPeriod(periodStart, periodEnd, maxResults, searchableDocumentTime)); }
public IList <THeader> Search(string queryText, int maxResults) { return(SearchEngine.Search(queryText, maxResults)); }