1.添加引用dll
using Lucene.Net.Search;
using Lucene.Net.Analysis.PanGu;
using PanGu;
using PanGu.HighLight;
using Lucene.Net.Documents;
using Lucene.Net.Store;
using Lucene.Net.Index;
using Lucene.Net.QueryParsers;
2.查询代码

1 /// <summary> 2 /// 从索引搜索结果 3 /// </summary> 4 private void SearchIndex() 5 { 6 Dictionary<string, string> dic = new Dictionary<string, string>(); 7 BooleanQuery bQuery = new BooleanQuery(); 8 CachingWrapperFilter filter = null; 9 TermQuery query2 = null; 10 string title = string.Empty; 11 string content = string.Empty; 12 if ((Request["title"] != null && Request["title"].ToString() != "") || !string.IsNullOrEmpty(txtTitle)) 13 { 14 string searchkey = Request["title"]==null?"":Request["title"].ToString(); 15 if(!string.IsNullOrEmpty(txtTitle)){ 16 searchkey=txtTitle; 17 } 18 foreach (string word in GetKeyWordsSplitBySpace(searchkey)) 19 { 20 query2 = new TermQuery(new Term("Title", word)); 21 bQuery.Add(query2, BooleanClause.Occur.SHOULD);//这里设置 条件为Or关系 22 query2 = new TermQuery(new Term("SimpleDesc", word)); 23 bQuery.Add(query2, BooleanClause.Occur.SHOULD);//这里设置 条件为Or关系 24 query2 = new TermQuery(new Term("Tags", word)); 25 bQuery.Add(query2, BooleanClause.Occur.SHOULD);//这里设置 条件为Or关系 26 //query2 = new TermQuery(new Term("ContextDesc", word)); 27 //bQuery.Add(query2, BooleanClause.Occur.SHOULD);//这里设置 条件为Or关系 28 } 29 dic.Add("Title", searchkey); 30 dic.Add("SimpleDesc", searchkey); 31 txtTitle = searchkey; 32 33 if(this.hfradchecked.Value!="全部"){ 34 //TermQuery query1 = new TermQuery(new Term("Types", this.hfradchecked.Value)); 35 txttype = this.hfradchecked.Value; 36 query2 = new TermQuery(new Term("Types", this.hfradchecked.Value.ToString())); 37 QueryWrapperFilter oldFilter = new QueryWrapperFilter(query2); 38 filter = new CachingWrapperFilter(oldFilter); 39 40 } 41 if (bQuery != null && bQuery.GetClauses().Length > 0) 42 { 43 GetSearchResult(bQuery, dic, filter); 44 } 45 } 46 47 48 } 49 /// <summary> 50 /// 获取 51 /// </summary> 52 /// <param name="bQuery"></param> 53 private void GetSearchResult(BooleanQuery bQuery, Dictionary<string, string> dicKeywords, CachingWrapperFilter filter) 54 { 55 try 56 { 57 //IndexSearcher search = new IndexSearcher(IndexDic, true); 58 FSDirectory directory = FSDirectory.Open(new DirectoryInfo(IndexDic), new NoLockFactory()); 59 IndexReader reader = IndexReader.Open(directory, true); 60 //IndexSearcher是进行搜索的类 61 IndexSearcher search = new IndexSearcher(reader); 62 Stopwatch stopwatch = Stopwatch.StartNew(); 63 //SortField构造函数第三个字段true为降序,false为升序 64 Sort sort = new Sort(new SortField("UploadTime", SortField.DOC, true)); 65 TopDocs docs = search.Search(bQuery, filter, PageSize * PageIndex, sort); 66 stopwatch.Stop(); 67 if (docs != null && docs.totalHits > 0) 68 { 69 lSearchTime = stopwatch.ElapsedMilliseconds; 70 txtPageFoot = GetPageFoot(PageIndex, PageSize, docs.totalHits, "sabrosus"); 71 for (int i = 0; i < docs.totalHits; i++) 72 { 73 if (i >= (PageIndex - 1) * PageSize && i < PageIndex * PageSize) 74 { 75 Document doc = search.Doc(docs.scoreDocs[i].doc); 76 ResourcesModel model = new ResourcesModel() 77 { 78 ID = doc.Get("ID").ToString(), 79 Title = doc.Get("Title").ToString(), 80 Tags = doc.Get("Tags").ToString(), 81 CreaetBy = doc.Get("CreaetBy").ToString(), 82 UploadTime = doc.Get("UploadTime").ToString(), 83 Types = doc.Get("Types").ToString(), 84 SimpleDesc = doc.Get("SimpleDesc").ToString(), 85 ContextDesc = doc.Get("ContextDesc").ToString() 86 }; 87 list.Add(SetHighlighter(dicKeywords, model)); 88 } 89 } 90 } 91 } 92 catch (Exception ex) 93 { 94 LogHelper.SaveLogError("",ex.ToString()); 95 96 } 97 98 } 99 100 /// <summary> 101 /// 处理关键字为索引格式 102 /// </summary> 103 /// <param name="keywords"></param> 104 /// <returns></returns> 105 private string[] GetKeyWordsSplitBySpace(string keywords) 106 { 107 PanGuTokenizer ktTokenizer = new PanGuTokenizer(); 108 StringBuilder result = new StringBuilder(); 109 List<string> listarry = new List<string>(); 110 ICollection<WordInfo> words = ktTokenizer.SegmentToWordInfos(keywords); 111 112 foreach (WordInfo word in words) 113 { 114 if (word == null) 115 { 116 continue; 117 } 118 listarry.Add(word.Word); 119 } 120 return listarry.ToArray(); 121 } 122 123 /// <summary> 124 /// 设置关键字高亮 125 /// </summary> 126 /// <param name="dicKeywords">关键字列表</param> 127 /// <param name="model">返回的数据模型</param> 128 /// <returns></returns> 129 private ResourcesModel SetHighlighter(Dictionary<string, string> dicKeywords, ResourcesModel model) 130 { 131 SimpleHTMLFormatter simpleHTMLFormatter = new PanGu.HighLight.SimpleHTMLFormatter("<font color="red">", "</font>"); 132 Highlighter highlighter = new PanGu.HighLight.Highlighter(simpleHTMLFormatter, new Segment()); 133 highlighter.FragmentSize = 50; 134 string strTitle = string.Empty; 135 string strContent = string.Empty; 136 string Title = model.Title; 137 string SimpleDesc = model.SimpleDesc; 138 dicKeywords.TryGetValue("Title", out strTitle); 139 dicKeywords.TryGetValue("SimpleDesc", out strContent); 140 141 if (!string.IsNullOrEmpty(strTitle)) 142 { 143 model.Title = highlighter.GetBestFragment(strTitle, model.Title); 144 if (model.Title == "" || model.Title==null) 145 { 146 model.Title = Title; 147 } 148 } 149 150 if (!string.IsNullOrEmpty(strContent)) 151 { 152 model.SimpleDesc = highlighter.GetBestFragment(strContent, model.SimpleDesc); 153 if (model.SimpleDesc == "" || model.SimpleDesc == null) 154 { 155 model.SimpleDesc = SimpleDesc; 156 } 157 model.SimpleDesc = GetContextSubstring(model.SimpleDesc, 200); 158 } 159 return model; 160 }