#region 搜索功能 protected void btnSearch_Click(object sender, EventArgs e) { this.rpTestContentShow.DataSource = getInfo(); this.rpTestContentShow.DataBind(); } #endregion protected void btnCreatIndex_Click(object sender, EventArgs e) { string path = Server.MapPath(@"/PanGu/Index"); string title = btnTltle.Text.Trim(); string summary = txtContent.Text.Trim(); bool isNew = false; if (!IndexReader.IndexExists(path)) { isNew = true; } Lucene.Net.Index.IndexWriter iw = new Lucene.Net.Index.IndexWriter(path, new PanGuAnalyzer(), isNew); #region 从数据库总读到数据 DataSet ds = new DataSet(); SqlParameter[] parameters = { new SqlParameter("@tablename", SqlDbType.VarChar, 50), new SqlParameter("@columns", SqlDbType.VarChar, 500), new SqlParameter("@pagesize", SqlDbType.Int), new SqlParameter("@currpage", SqlDbType.Int), new SqlParameter("@order", SqlDbType.VarChar,2000), new SqlParameter("@where", SqlDbType.VarChar,2000), }; parameters[0].Value = "VW_Product_ForSearch"; parameters[1].Value = " *"; parameters[2].Value = 1000; parameters[3].Value = 1; parameters[4].Value = " product_order asc"; parameters[5].Value = " 1=1"; using (SqlConnection conn = new SqlConnection(DBHelper.conStr)) { using (SqlCommand cmd = new SqlCommand("JF_GetFinalPager", conn)) { cmd.Parameters.AddRange(parameters); cmd.CommandType = CommandType.StoredProcedure; conn.Open(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds); conn.Close(); } } #endregion DataTable dt = ds.Tables[0]; if (dt != null && dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { Document doc = new Document(); doc.Add(new Lucene.Net.Documents.Field("title", dr["p_name"].ToString(), Lucene.Net.Documents.Field.Store.YES, Field.Index.ANALYZED)); doc.Add(new Lucene.Net.Documents.Field("summary", dr["c_name"].ToString(), Lucene.Net.Documents.Field.Store.YES, Field.Index.ANALYZED)); doc.Add(new Lucene.Net.Documents.Field("createTime", DateTime.Now.ToString("yyyy-MM-dd"), Lucene.Net.Documents.Field.Store.YES, Field.Index.ANALYZED)); iw.AddDocument(doc); } } iw.Optimize(); iw.Close(); }
下边代码为盘古分词创建索引
public string Search = string.Empty; protected void btnSearch_Click(object sender, EventArgs e) { string path = Server.MapPath(@"/PanGu/Index"); string keywords = this.btnTltle.Text.Trim(); IndexSearcher searcher = new IndexSearcher(path); QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "title", new PanGuAnalyzer()); Query qq = parser.Parse(keywords); Hits hits=searcher.Search(qq); PanGu.HighLight.SimpleHTMLFormatter simpleHTMLFormatter = new PanGu.HighLight.SimpleHTMLFormatter("<span style=\"font-weight:bold;color:red;\">", "</span>"); PanGu.HighLight.Highlighter highlighter = new PanGu.HighLight.Highlighter(simpleHTMLFormatter, new Segment()); highlighter.FragmentSize = 50; StringBuilder sb = new StringBuilder(); DataTable dtTab = new DataTable(); dtTab.Columns.Add("p_name"); dtTab.Columns.Add("c_name"); for (int i = 0; i < hits.Length(); i++) { DataRow dr = dtTab.NewRow(); Document doc = hits.Doc(i); dr[0] = highlighter.GetBestFragment(keywords, doc.Get("title")); dr[1] = doc.Get("summary"); dtTab.Rows.Add(dr); } this.rpTestContentShow.DataSource = dtTab; this.rpTestContentShow.DataBind(); }