• sulin LuceneNet 搜索二


    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         }
    View Code
  • 相关阅读:
    之三:CAAnimationGroup
    之二:CAKeyframeAnimation
    Core Animation
    swift基础语法(28- 继承与构造方法, 指定构造与便利构造方法)
    swift基础语法(26-继承,super关键字,override关键字,final关键字)
    swift基础语法(25- 下标subscripts)
    swift基础语法(24-方法,self关键字,mutating方法,类方法)
    swift基础语法(23- 属性,存储属性,延迟存储属性,计算属性,属性观察器,类属性)
    swift基础语法(22-类,类的恒等运算)
    swift基础语法(21-结构体,结构体构造器,定义成员方法)
  • 原文地址:https://www.cnblogs.com/linsu/p/4939573.html
Copyright © 2020-2023  润新知