午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > 使用Lucene.NET實現站內搜索

使用Lucene.NET實現站內搜索

熱門標簽:寧夏機器人電銷 400免費電話怎么辦理 河南語音外呼系統公司 威海電銷 400電話辦理最優質 t3出行地圖標注怎么做 關于宗地圖標注技術規范 外呼電銷機器人軟件 河北網絡回撥外呼系統

導入Lucene.NET 開發包

Lucene 是apache軟件基金會一個開放源代碼的全文檢索引擎工具包,是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。Lucene的目的是為軟件開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者是以此為基礎建立起完整的全文檢索引擎。Lucene.Net 是 .NET 版的Lucene。

你可以在這里下載到最新的Lucene.NET

創建索引、更新索引、刪除索引

搜索,根據索引查找

IndexHelper 添加、更新、刪除索引

using System;
using Lucene.Net.Store;
using Lucene.Net.Index;
using Lucene.Net.Analysis.PanGu;
using Lucene.Net.Documents;

namespace BLL
{
  class IndexHelper
  {
    /// summary>
    /// 日志小助手
    /// /summary>
    static Common.LogHelper logger = new Common.LogHelper(typeof(SearchBLL));
    /// summary>
    /// 索引保存的位置,保存在配置文件中從配置文件讀取
    /// /summary>
    static string indexPath = Common.ConfigurationHelper.AppSettingMapPath("IndexPath");
    
    /// summary>
    /// 創建索引文件或更新索引文件
    /// /summary>
    /// param name="item">索引信息/param>
    public static void CreateIndex(Model.HelperModel.IndexFileHelper item)
    {
      try
      {
        //索引存儲庫
        FSDirectory directory = FSDirectory.Open(new System.IO.DirectoryInfo(indexPath), new NativeFSLockFactory());
        //判斷索引是否存在
        bool isUpdate = IndexReader.IndexExists(directory);
        if (isUpdate)
        {
          //如果索引目錄被鎖定(比如索引過程中程序異常退出),則首先解鎖
          if (IndexWriter.IsLocked(directory))
          {
            //解鎖索引庫
            IndexWriter.Unlock(directory);
          }
        }
        //創建IndexWriter對象,添加索引
        IndexWriter writer = new IndexWriter(directory, new PanGuAnalyzer(), !isUpdate, Lucene.Net.Index.IndexWriter.MaxFieldLength.UNLIMITED);
        //獲取新聞 title部分
        string title = item.FileTitle;
        //獲取新聞主內容
        string body = item.FileContent;
        //為避免重復索引,所以先刪除number=i的記錄,再重新添加
        //尤其是更新的話,更是必須要先刪除之前的索引
        writer.DeleteDocuments(new Term("id", item.FileName));
        //創建索引文件 Document
        Document document = new Document();
        //只有對需要全文檢索的字段才ANALYZED
        //添加id字段
        document.Add(new Field("id", item.FileName, Field.Store.YES, Field.Index.NOT_ANALYZED));
        //添加title字段
        document.Add(new Field("title", title, Field.Store.YES, Field.Index.NOT_ANALYZED));
        //添加body字段
        document.Add(new Field("body", body, Field.Store.YES, Field.Index.ANALYZED, Lucene.Net.Documents.Field.TermVector.WITH_POSITIONS_OFFSETS));
        //添加url字段
        document.Add(new Field("url", item.FilePath, Field.Store.YES, Field.Index.NOT_ANALYZED));
        //寫入索引庫
        writer.AddDocument(document);
        //關閉資源
        writer.Close();
        //不要忘了Close,否則索引結果搜不到
        directory.Close();
        //記錄日志
        logger.Debug(String.Format("索引{0}創建成功",item.FileName));
      }
      catch (SystemException ex)
      {
        //記錄錯誤日志
        logger.Error(ex);
        throw;
      }
      catch (Exception ex)
      {
        //記錄錯誤日志
        logger.Error(ex);
        throw;
      }
    }

    /// summary>
    /// 根據id刪除相應索引
    /// /summary>
    /// param name="guid">要刪除的索引id/param>
    public static void DeleteIndex(string guid)
    {
      try
      {
        ////索引存儲庫
        FSDirectory directory = FSDirectory.Open(new System.IO.DirectoryInfo(indexPath), new NativeFSLockFactory());
        //判斷索引庫是否存在索引
        bool isUpdate = IndexReader.IndexExists(directory);
        if (isUpdate)
        {
          //如果索引目錄被鎖定(比如索引過程中程序異常退出),則首先解鎖
          if (IndexWriter.IsLocked(directory))
          {
            IndexWriter.Unlock(directory);
          }
        }
        IndexWriter writer = new IndexWriter(directory, new PanGuAnalyzer(), !isUpdate, Lucene.Net.Index.IndexWriter.MaxFieldLength.UNLIMITED);
        //刪除索引文件
        writer.DeleteDocuments(new Term("id", guid));
        writer.Close();
        directory.Close();//不要忘了Close,否則索引結果搜不到
        logger.Debug(String.Format("刪除索引{0}成功", guid));
      }
      catch (Exception ex)
      {
        //記錄日志
        logger.Error(ex);
        //拋出異常
        throw;
      }
    }
  }
}

Search 通過查找索引實現搜索

using Lucene.Net.Analysis;
using Lucene.Net.Analysis.PanGu;
using Lucene.Net.Documents;
using Lucene.Net.Index;
using Lucene.Net.Search;
using Lucene.Net.Store;
using Model.HelperModel;
using System;
using System.Collections.Generic;

namespace BLL
{
  public static class SearchBLL
  {
    //一個類中可能會有多處輸出到日志,多處需要記錄日志,常將logger做成static 靜態變量
    /// summary>
    /// 日志助手
    /// /summary>
    static Common.LogHelper logger = new Common.LogHelper(typeof(SearchBLL));
    /// summary>
    /// 索引保存位置
    /// /summary>
    static string indexPath = Common.ConfigurationHelper.AppSettingMapPath("IndexPath");
    /// summary>
    /// 搜索
    /// /summary>
    /// param name="keywords">用戶搜索的關鍵詞/param>
    /// returns>返回搜索的結果/returns>
    public static ListSearchResult> Search(string keywords)
    {
      try
      {
        //索引存儲庫
        FSDirectory directory = FSDirectory.Open(new System.IO.DirectoryInfo(indexPath), new NoLockFactory());
        //創建IndexReader對象
        IndexReader reader = IndexReader.Open(directory, true);
        //創建IndexSearcher對象
        IndexSearcher searcher = new IndexSearcher(reader);
        //新建PhraseQuery 查詢對象
        PhraseQuery query = new PhraseQuery();
        //把用戶輸入的關鍵詞進行拆詞
        foreach (string word in SplitWord(keywords))
        {
          //添加搜索關鍵詞
          query.Add(new Term("body", word));
        }
        //設置分詞間距為100字之內
        query.SetSlop(100);
        TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true);
        //根據查詢條件查詢結果
        searcher.Search(query, null, collector);
        //搜索到的ScoreDoc結果
        ScoreDoc[] docs = collector.TopDocs(0, collector.GetTotalHits()).scoreDocs;
        //保存搜索結果的list
        ListSearchResult> listResult = new ListSearchResult>();
        for (int i = 0; i  docs.Length; i++)
        {
          //取到文檔的編號(主鍵,這個是Lucene .net分配的)
          //檢索結果中只有文檔的id,如果要取Document,則需要Doc再去取
          //降低內容占用
          int docId = docs[i].doc;
          //根據id找Document
          Document doc = searcher.Doc(docId);
          string number = doc.Get("id");
          string title = doc.Get("title");
          string body = doc.Get("body");
          string url = doc.Get("url");
          //建立一個搜索結果對象
          SearchResult result = new SearchResult();
          result.Number = number;
          result.Title = title;
          result.BodyPreview = Preview(body, keywords);
          result.Url = url;
          //添加到結果列表
          listResult.Add(result);
        }
        if (listResult.Count == 0)
        {
          return null;
        }
        else
        {
          return listResult;
        }
      }
      catch (SystemException ex)
      {
        logger.Error(ex);
        return null;
      }
      catch (Exception ex)
      {
        logger.Error(ex);
        return null;
      }
    }

    /// summary>
    /// 獲取內容預覽
    /// /summary>
    /// param name="body">內容/param>
    /// param name="keyword">關鍵詞/param>
    /// returns>/returns>
    private static string Preview(string body, string keyword)
    {
      //創建HTMLFormatter,參數為高亮單詞的前后綴 
      PanGu.HighLight.SimpleHTMLFormatter simpleHTMLFormatter = new PanGu.HighLight.SimpleHTMLFormatter("font color=\"red\">", "/font>");
      //創建 Highlighter ,輸入HTMLFormatter 和 盤古分詞對象Semgent 
      PanGu.HighLight.Highlighter highlighter = new PanGu.HighLight.Highlighter(simpleHTMLFormatter, new PanGu.Segment());
      //設置每個摘要段的字符數 
      highlighter.FragmentSize = 100;
      //獲取最匹配的摘要段 
      string bodyPreview = highlighter.GetBestFragment(keyword, body);
      return bodyPreview;
    }

    /// summary>
    /// 盤古分詞,對用戶輸入的搜索關鍵詞進行分詞
    /// /summary>
    /// param name="str">用戶輸入的關鍵詞/param>
    /// returns>分詞之后的結果組成的數組/returns>
    private static string[] SplitWord(string str)
    {
      Liststring> list = new Liststring>();
      Analyzer analyzer = new PanGuAnalyzer();
      TokenStream tokenStream = analyzer.TokenStream("", new System.IO.StringReader(str));
      Lucene.Net.Analysis.Token token = null;
      while ((token = tokenStream.Next()) != null)
      {
        list.Add(token.TermText());
      }
      return list.ToArray();
    }
  }
}

SearchResult 模型

namespace Model.HelperModel
{
  public class SearchResult
  {
    public string Number { get; set; }

    public string Title { get; set; }

    public string BodyPreview { get; set; }

    public string Url { get; set; }
  }
}

以上所述就是本文的全部內容了,希望大家能夠喜歡。

您可能感興趣的文章:
  • Lucene.Net實現搜索結果分類統計功能(中小型網站)
  • Java實現lucene搜索功能的方法(推薦)
  • 基于Lucene的Java搜索服務器Elasticsearch安裝使用教程
  • 使用Java的Lucene搜索工具對檢索結果進行分組和分頁
  • 基于ASP.NET的lucene.net全文搜索實現步驟
  • 使用Lucene實現一個簡單的布爾搜索功能

標簽:咸寧 樂山 廣元 吉林 池州 固原 賀州 淮北

巨人網絡通訊聲明:本文標題《使用Lucene.NET實現站內搜索》,本文關鍵詞  使用,Lucene.NET,實現,站內,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《使用Lucene.NET實現站內搜索》相關的同類信息!
  • 本頁收集關于使用Lucene.NET實現站內搜索的相關信息資訊供網民參考!
  • 推薦文章
    丁香婷婷综合网| 久久久噜噜噜久久| 亚洲欧美一二三| 久久电影网站中文字幕| 国产成人短视频| 成人高潮片免费视频| 欧美黑人一区二区三区| 欧美一级淫片免费视频黄| 日韩视频一区在线| 五月婷婷丁香在线| 久久久久久12| 亚洲精品一区二区三区四区| 成人免费网视频| 久久精品免费| 久久99精品国产一区二区三区| 午夜视频www| 免费h精品视频在线播放| 成人高清视频免费观看| 亚洲国产成人精品无码区99| 亚洲免费资源在线播放| 视色,视色影院,视色影库,视色网| 中文字幕精品—区二区四季| 欧美一级裸体视频| 欧美揉bbbbb揉bbbbb| 992在线观看| 国语自产精品视频在线看抢先版图片 | 国产精品免费久久久| 首页国产欧美日韩丝袜| 亚洲一区三区在线观看| 亚洲男人天堂av| 中文字幕一区三区久久女搜查官| 亚洲欧美日韩中文在线| a视频免费在线观看| 久久riav| 亚洲麻豆国产自偷在线| 波多野结衣一二三四区| 国产亚洲精品激情久久| www.国产三级| 亚洲成人av免费在线观看| 久久精品成人欧美大片| 欧美高清在线精品一区| 99精品中文字幕| 豆国产97在线| 欧美日韩一区二区欧美激情 | 在线观看国产免费视频| 日韩精品一区二区三区四区| 精品无码人妻一区二区三区品| 久久99精品久久久久久青青91| 国语对白永久免费| 国产综合福利在线| 超碰av在线免费观看| 日韩欧美高清在线观看| 久久久www成人免费精品张筱雨| 亚洲春色一区二区三区| 日本一本中文字幕| 国产精品午夜av在线| 337p日本欧洲亚洲大胆色噜噜| www.国产com| 精品欧美日韩在线| 在线观看区一区二| 久久久国产免费| 亚洲欧美一二三| 亚洲精品国产综合区久久久久久久| 亚洲AV无码精品自拍| 日韩av资源在线| 精品国产一区二区三区久久狼黑人| 九一九一国产精品| 香蕉视频1024| 国产精品海角社区在线观看| 国产精品国产自产拍高清av | 精品国产一二区| 国产精品成人在线| 精品国产鲁一鲁一区二区张丽| 国产成人无码av| 久久99久久久久久| 欧美寡妇偷汉性猛交| 国产精品久久久久影院| 高潮毛片又色又爽免费| 黄页网站大全在线观看| 久久久最新网址| 午夜精品123| 欧美一级做性受免费大片免费| 污色网站在线观看| 欧美一区二区三区…… | 国产日韩av网站| 97视频免费看| 一本久久综合亚洲鲁鲁五月天 | 日韩在线免费视频观看| 欧美国产欧美综合| 黄色片视频网站| 日韩欧美在线一区二区| 日本高清无吗v一区| 看片网站欧美日韩| 国精产品一区一区二区三区mba| 图片区小说区区亚洲五月| 亚洲欧洲午夜一线一品| 日本一区二区不卡视频| 国产欧美日韩成人| 韩国三级丰满少妇高潮| 国产精品久久久久久久久影视 | 中文在线第一页| 真实国产乱子伦对白视频| 日韩在线视频中文字幕| 亚洲国产欧美日韩另类综合| 欧美 日韩 中文字幕| а天堂中文在线资源| 久久99中文字幕| 久久91精品国产| 欧美色爱综合网| 成人精品视频网站| 中文无码av一区二区三区| 亚洲av无码一区东京热久久| 一本色道久久综合亚洲精品婷婷 | 亚洲 欧美 日韩 国产综合 在线| 国产日韩欧美夫妻视频在线观看| 亚洲激情在线观看| 亚洲综合视频在线| 国产一区二区三区日韩| 波多野结衣电影在线播放| 女尊高h男高潮呻吟| 国产精品久久中文字幕| 成人欧美一区二区| 欧美乱大交做爰xxxⅹ性3| 午夜成人在线视频| aaa亚洲精品一二三区| 蜜臀久久久久久999| 国产视频91在线| 日本50路肥熟bbw| 中文字幕永久视频| 超级碰在线观看| 国产精品一区二区a| 国产成人精品视| 色婷婷av一区二区三区在线观看| 欧美亚洲国产一区在线观看网站| 日本一区二区高清| 国产精品1区二区.| 日本中文一区二区三区| 国产叼嘿视频在线观看| 五月天婷婷导航| 亚洲天堂黄色片| 久久一级免费视频| 亚洲第九十七页| 最新免费av网址| 亚洲一级片免费| 好男人www社区| 亚洲不卡中文字幕| 久久久久久久久四区三区| 91精品国产沙发| 久久久国产91| 亚洲国产91精品在线观看| 精品视频全国免费看| 亚洲国产精品久久久久婷婷884| 老司机午夜精品| 久久机这里只有精品| 亚洲爆乳无码一区二区三区| 久久精品www| av黄色在线播放| www.99re7.com| 日韩欧美亚洲一区二区三区| a级大片在线观看| 欧美成人乱码一二三四区免费| 欧美日韩在线不卡视频| 亚洲啪啪av| 免费看欧美一级片| 欧美大黑帍在线播放| 中国 免费 av| 中文字幕欧美人与畜| av动漫在线免费观看| 中国丰满人妻videoshd| 日韩少妇内射免费播放18禁裸乳| 欧美一区二区三区爽大粗免费| 97超碰免费观看| 精品少妇人妻av免费久久洗澡| 青青青青草视频| 亚洲一区二区福利视频| 久久久久国产精品无码免费看| 女人又爽又黄免费女仆| 国产精品69久久久久孕妇欧美| 99成人在线观看| 国产91精品一区| 亚洲AV无码精品国产| 婷婷在线观看视频| 国产成人一区在线| 亚洲精品成人精品456| 在线一区二区三区四区| 在线电影一区二区三区| 国产亚洲精品美女久久久| 欧美极品在线播放| 成人精品视频在线| 一区中文字幕在线观看| 毛片av在线播放| 在线播放免费视频| 1024在线看片| 自拍偷拍色综合| 国产激情偷乱视频一区二区三区| 国产色产综合色产在线视频| 日韩欧美国产高清91| 日韩久久免费视频| 国产精品人成电影| 先锋影音亚洲资源| 中文字幕一区二区在线观看视频| 久久精品一区二区三区四区五区| 欧美第一页在线观看| 国产高潮流白浆| 国产免费av电影| 成人午夜又粗又硬又大| 高跟丝袜一区二区三区| 最近2019免费中文字幕视频三 | 一级特黄aaa| 久久综合色一综合色88| 五月天精品一区二区三区| 亚洲欧美中文在线视频| 国产这里只有精品| 欧美精品99久久| 天堂社区在线视频| 国产毛片毛片毛片毛片毛片毛片| 91社区视频在线观看| 国产精品久久久久久久久久久久久久久久久久 | www.四虎在线观看| 不卡一卡二卡三乱码免费网站| 久久国产精品99精品国产| 久久久久在线| 亚洲一区在线电影| 美日韩在线视频| 9191国产视频| 日本一区二区免费在线观看| 精品亚洲国产成人av制服丝袜| 91成人在线观看喷潮| 欧美综合在线观看| 亚洲图色在线| 青娱乐国产在线视频| 懂色av中文一区二区三区| 亚洲激情免费观看| 久中文字幕一区| 亚洲中文字幕无码一区| 国产成人高清视频| 欧美一级欧美三级| 欧美一卡2卡3卡4卡无卡免费观看水多多| 中国特级黄色大片| 国产精品18p| 1000精品久久久久久久久| 欧美丰满美乳xxx高潮www| 欧美激情精品久久久久久久变态 | 久久色精品视频| 97超碰在线视| 在线能看的av| 一区二区三区在线视频免费观看| 久久精品久久久久久国产 免费| 亚洲精品日韩成人| 久久精品无码人妻| 国产精品久久一级| 日韩美女主播视频| 国内外成人免费在线视频| 蜜臀av在线观看| 日韩欧美国产黄色| 久久男人资源视频| 性活交片大全免费看| 蜜臀av性久久久久蜜臀aⅴ| 日韩电影大全免费观看2023年上| 日韩精品伦理第一区| 色一情一乱一伦| 欧美日韩国产一区二区| 国产精品一区二区三区免费视频| 丰满人妻一区二区三区53视频| 蜜臀av一区二区在线免费观看| 国产午夜精品久久久 | 国产偷人视频免费| 奇米精品一区二区三区在线观看一| 亚洲第一免费网站| 久久久一本二本三本| 熟妇人妻中文av无码| 视频在线观看99| 美女被艹视频网站| 成人免费视频网站在线观看| 91av在线免费观看视频| 在线播放第一页| 99久久精品国产导航| 日韩**中文字幕毛片| 波兰性xxxxx极品hd| 午夜精品福利久久久| 日韩理论片在线观看| 国产精品久久久久久久久毛片 | 欧美日韩国产综合一区二区| 亚洲一二三区在线| 首页亚洲欧美制服丝腿| 在线观看亚洲区| 亚洲午夜久久久久久久久| 一区二区三区中文字幕电影 | 91最新地址在线播放| 成人在线视频网站| 丝袜美腿小色网| 4438x成人网最大色成网站| 久久久久久久中文| 韩国av一区二区三区| 国产精品成熟老女人| 青青国产在线观看| 精品捆绑美女sm三区| 亚洲国产精品三区| 亚洲欧美日韩国产成人精品影院 | 三级黄色在线观看| 一区二区三区四区在线| 成人在线国产视频| 99久久精品国产一区| 成人91免费视频| 国产91视频在线| 日av在线播放中文不卡| 中文字幕一区二区人妻在线不卡| 91久久香蕉国产日韩欧美9色| 人妻av中文系列| 成人av一区二区三区| 欧美精品国产精品久久久 | 欧美在线一区二区| 精产国品一区二区三区| 婷婷成人综合网| 国产精品人人爽人人爽| 亚洲电影一级黄| 亚洲污视频在线观看| 国产精品蜜臀在线观看| 黄页网站大全在线观看| 中文字幕av在线一区二区三区| 日韩欧美一区二| 亚洲电影一级黄| 中文字幕国产传媒| 9191成人精品久久| 夫妇露脸对白88av| 国产视频精品在线| 久久久全国免费视频| 国内偷自视频区视频综合| 国产精品爽爽久久久久久| 欧美最顶级的aⅴ艳星| 人人妻人人玩人人澡人人爽| av成人午夜| 高潮精品一区videoshd| 欧美 日韩 国产 在线观看| 中文字幕乱码一区二区免费| 免费在线观看日韩视频| 在线亚洲高清视频| av在线免费播放网址| 九色91av视频| 蜜桃av中文字幕| 久久久久久一区| 亚洲欧美日韩中文播放| 日韩黄色一区二区| 欧美一级xxx| 小泽玛利亚一区| 久久精品在线视频| 亚洲自拍偷拍另类| 久久国产精品 国产精品| 国产精品久久久久婷婷二区次| 一区二区三区四区毛片| 日韩av在线一区二区| 久久久精品毛片| 精品一区久久| 亚洲综合精品久久| 亚洲xxxx3d动漫| 亚洲专区在线视频| 亚洲欧洲一区二区在线播放| 无码国产精品久久一区免费| 成人小视频免费在线观看| 日韩精品一区二区三区久久| 精品国产一区二区三区忘忧草| 日本妇乱大交xxxxx| 欧美美乳视频网站在线观看| 91麻豆精东视频| 国产福利短视频| 日韩美女在线播放| 风间由美性色一区二区三区| 999热精品视频| 久久久精品网站| 国产一区三区三区| 女同性αv亚洲女同志| 奇门遁甲1982国语版免费观看高清 | 美国av在线播放| 日韩欧美亚洲综合| 欧美一区免费看| 亚洲欧美日韩精品综合在线观看| 欧美一区二区女人| 青草av.久久免费一区| 伦伦影院午夜日韩欧美限制| av图片在线观看| 中国黄色片视频| 日韩精品xxxx| 国产中文一区二区| 在线观看成人黄色| 欧美一级在线免费| 中文字幕中文字幕中文字幕亚洲无线| 蜜臀精品久久久久久蜜臀| 精品人妻一区二区三区潮喷在线 | 精品国产三级电影在线观看| 午夜激情久久久| 久久99国产精品久久99| 蜜臀精品一区二区三区| 欧美午夜精品理论片| 亚洲欧美精品| 国产精品激情av电影在线观看 | 亚洲一线在线观看| 精品亚洲乱码一区二区| 伊人久久大香线蕉午夜av| 国产成人精品国内自产拍免费看 | 五月婷婷六月香| av在线网址导航| 久久另类ts人妖一区二区| 色一区av在线| 欧美中文字幕亚洲一区二区va在线| 成人综合婷婷国产精品久久蜜臀 | 97成人在线观看视频| 国产精品美女午夜av| 中文欧美在线视频| 亚洲一区免费视频| 日韩电影在线看|