private IndexWriter InitIndex(Func <IConcurrentMergeScheduler> newScheduler, Random random, MockDirectoryWrapper dir, bool initialCommit) { dir.SetLockFactory(NoLockFactory.GetNoLockFactory()); IndexWriter writer = new IndexWriter(dir, NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)) .SetMaxBufferedDocs(10) .SetMergeScheduler(newScheduler())); IConcurrentMergeScheduler scheduler = writer.Config.MergeScheduler as IConcurrentMergeScheduler; if (scheduler != null) { scheduler.SetSuppressExceptions(); } if (initialCommit) { writer.Commit(); } Document doc = new Document(); doc.Add(NewTextField("content", "aaa", Field.Store.NO)); doc.Add(NewTextField("id", "0", Field.Store.NO)); for (int i = 0; i < 157; i++) { writer.AddDocument(doc); } return(writer); }
public static List <int> Search(string key) { if (string.IsNullOrEmpty(key)) { return(null); } key = key.Trim().ToLower(); var rs = new List <int>(); try { var indexDir = Path.Combine(System.IO.Directory.GetCurrentDirectory(), "lucene"); var VERSION = Lucene.Net.Util.LuceneVersion.LUCENE_48; if (System.IO.Directory.Exists(indexDir) == true) { var reader = DirectoryReader.Open(FSDirectory.Open(new DirectoryInfo(indexDir))); var search = new IndexSearcher(reader); var directory = FSDirectory.Open(new DirectoryInfo(indexDir), NoLockFactory.GetNoLockFactory()); var reader2 = DirectoryReader.Open(directory); var search2 = new IndexSearcher(reader2); //var parser = new QueryParser(VERSION, "title", new JieBaAnalyzer(TokenizerMode.Search)); var booleanQuery = new BooleanQuery(); var list = CutKeyWord(key); foreach (var word in list) { var query1 = new TermQuery(new Term("title", word)); var query2 = new TermQuery(new Term("summary", word)); booleanQuery.Add(query1, Occur.SHOULD); booleanQuery.Add(query2, Occur.SHOULD); } var collector = TopScoreDocCollector.Create(1000, true); search2.Search(booleanQuery, null, collector); var docs = collector.GetTopDocs(0, collector.TotalHits).ScoreDocs; foreach (var d in docs) { var num = d.Doc; var document = search.Doc(num);// 拿到指定的文档 var articleId = document.Get("articleId"); //var name = document.Get("title"); if (int.TryParse(articleId, out int mid) == true) { rs.Add(mid); } } } } catch (Exception ex) { Console.WriteLine($"SearchMerchs ex={ex}"); } return(rs); }