public static void OptimizeLuceneIndex() { //var analyzer = new StandardAnalyzer(Version.LUCENE_30); var analyzer = SearcherBase.GetAnalyzer(); using (var writer = new IndexWriter(SearcherBase.Directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED)) { analyzer.Close(); writer.Optimize(); } }
/// <summary> /// 按id清楚 /// </summary> /// <param name="recordId"></param> public static void ClearLuceneIndexRecord(int recordId) { //var analyzer = new StandardAnalyzer(Version.LUCENE_30); var analyzer = SearcherBase.GetAnalyzer(); using (var writer = new IndexWriter(SearcherBase.Directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED)) { var searchQuery = new TermQuery(new Term("Id", recordId.ToString())); writer.DeleteDocuments(searchQuery); analyzer.Close(); } }
public static void UpdateLuceneIndex(IEnumerable <Article> data) { //var analyzer = new StandardAnalyzer(Version.LUCENE_30); var analyzer = SearcherBase.GetAnalyzer(); using (var writer = new IndexWriter(SearcherBase.Directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED)) { // replaces older entry if any foreach (var sd in data) { AddToLuceneIndex(sd, writer); } analyzer.Close(); } }
/// <summary> /// 清楚全部 /// </summary> /// <returns></returns> public static bool ClearLuceneIndex() { try { //var analyzer = new StandardAnalyzer(Version.LUCENE_30); var analyzer = SearcherBase.GetAnalyzer(); using (var writer = new IndexWriter(SearcherBase.Directory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED)) { writer.DeleteAll(); analyzer.Close(); } } catch (Exception e) { return(false); } return(true); }
private static IEnumerable <Article> SearchQuery(string searchQuery, int pageIndex, int pageSize, string searchField = "") { if (string.IsNullOrEmpty(searchQuery.Replace("*", "").Replace("?", ""))) { return(new List <Article>()); } using (var searcher = new IndexSearcher(SearcherBase.Directory, false)) { var hitsLimit = 1000; //var analyzer = new StandardAnalyzer(Version.LUCENE_30); var analyzer = SearcherBase.GetAnalyzer(); if (!string.IsNullOrEmpty(searchField)) { var parser = new QueryParser(Version.LUCENE_30, searchField, analyzer); var query = ParseQuery(searchQuery, parser); var hits = searcher.Search(query, hitsLimit).ScoreDocs; hits = hits.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToArray(); var results = MapLuceneToDataList(hits, searcher); analyzer.Dispose(); return(results); } else { var parser = new MultiFieldQueryParser(Version.LUCENE_30, new[] { "Id", "Title", "Description", "Time", "Browses", "Category", "UserId" }, analyzer); var query = ParseQuery(searchQuery, parser); var hits = searcher.Search(query, null, hitsLimit, Sort.RELEVANCE).ScoreDocs; hits = hits.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToArray(); var results = MapLuceneToDataList(hits, searcher); foreach (var item in results) { item.Description = SearcherBase.SimpleHighLighter(item.Description, searchQuery, "<font color='#C60A00'>", "</font>", 226); } analyzer.Close(); return(results); } } }