public void StartSearch(IList <AliEngine> aliEngineArray) { try { PauseSearch(); if (task != null) { task.Wait(); } var list = new List <Searcher>(aliEngineArray.Count); foreach (var aliEngine in aliEngineArray) { var s = Searchers?.FirstOrDefault(a => a.AliEngine == aliEngine); if (s == null) { //from cache s = FromCache(aliEngine); if (s == null) //init new { s = new Searcher(aliEngine); } } list.Add(s); } Searchers = list; //run async task = Task.Run(() => { Continue(); }); } catch (Exception ex) { Catch.Set(ex); } }
// Get and old searcher matching the specified versions: public ShardIndexSearcher Acquire(long[] nodeVersions) { IndexSearcher s = Searchers.Acquire(nodeVersions[MyNodeID]); if (s is null) { throw new SearcherExpiredException("nodeID=" + MyNodeID + " version=" + nodeVersions[MyNodeID]); } return(new ShardIndexSearcher(this, nodeVersions, s.IndexReader, MyNodeID)); }
public void Dispose() { if (currentShardSearcher != null) { currentShardSearcher.IndexReader.DecRef(); } Searchers.Dispose(); Mgr.Dispose(); Writer.Dispose(); Dir.Dispose(); }
// Reopen local reader public void Reopen() { IndexSearcher before = Mgr.Acquire(); Mgr.Release(before); Mgr.MaybeRefresh(); IndexSearcher after = Mgr.Acquire(); try { if (after != before) { // New searcher was opened long version = Searchers.Record(after); Searchers.Prune(new SearcherLifetimeManager.PruneByAge(outerInstance.maxSearcherAgeSeconds)); outerInstance.BroadcastNodeReopen(MyNodeID, version, after); } } finally { Mgr.Release(after); } }
public override bool IsMatch(PluginInfo plugin) => Searchers.All(s => s.IsMatch(plugin));
public void AddSearchEngine(Searcher searcher) { Searchers.Add(searcher); }