/// <summary> /// 根据 path 路径获取对应的索引目录缓存 /// </summary> /// <param name="path"></param> /// <returns></returns> public static LuceneAddIn.Search.IndexSearcher Get(string path) { LuceneAddIn.Search.IndexSearcher searcher = null; // 如果不在缓存中,尝试读取进缓存 IIndexDirectory dir = IndexDirectoryCache.Get(path); if (dir == null && System.IO.Directory.Exists(path)) { try { LuceneAddIn.Store.FSDirectory directory = LuceneAddIn.Store.MMapDirectory.Open(new System.IO.DirectoryInfo(path)); dir = new LuceneDirectory(path, false) { Directory = directory }; IndexDirectoryCache.Set(dir); LuceneSearcherManager.Set(dir as LuceneDirectory); } catch { } } lock (Locker) { if (SearcherCache.ContainsKey(path)) { searcher = SearcherCache[path] ; } } return searcher; }
/// <summary> /// 设置一批搜索器进缓存 /// </summary> /// <param name="dirs"></param> public static void SetRange(LuceneDirectory[] dirs) { if (dirs != null && dirs.Length != 0) { foreach (LuceneDirectory dir in dirs) { Set(dir); } } }
/// <summary> /// 设置缓存 /// </summary> /// <param name="dir"></param> public static void Set(LuceneDirectory dir) { lock (Locker) { SearcherCache[dir.IndexPath] = new LuceneAddIn.Search.IndexSearcher(dir.Directory, true); } }