用Lucene.net對數據庫建立索引及搜索 (2)

用Lucene.net對數據庫建立索引及搜索 (2)

關鍵詞 Lucene.net,asp.                                          

cs代碼

 

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Lucene.Net;
using Lucene.Net.Index;
using Lucene.Net.Documents;
using  Lucene.Net.QueryParsers;
using Lucene.Net.Search;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Analysis.Cn;

namespace WebApplication4
{
    /// <summary>
    /// WebForm1 的摘要說明。
    /// </summary>
    public class WebForm1 : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.TextBox tj;
        protected System.Web.UI.WebControls.Button Search;
        protected System.Web.UI.WebControls.DataGrid SearGrid;


        public string connstr="server=.;database=TopWin2;uid=sa;pwd=";
        private void Page_Load(object sender, System.EventArgs e)
        {
            // 在此處放置用戶代碼以初始化頁面
            if (!Page.IsPostBack)
            {
                //打開數據庫表
                SqlDataReader myred=OpenTable();
                //建立索引
                IndexWriter writer=CreateIndex(myred);
            }
        }

        public SqlDataReader OpenTable()
        {
            SqlConnection mycon=new SqlConnection(connstr);
            mycon.Open();
            SqlCommand mycom=new SqlCommand("select id,title,content from userblog order by id",mycon);
            return mycom.ExecuteReader();
        }

        public IndexWriter CreateIndex(SqlDataReader myred)
        {
            IndexWriter writer = new IndexWriter("c:/index/", new ChineseAnalyzer(), true);
            try
            {
                //建立索引字段
                while(myred.Read())
                {
                    Document doc=new Document();
                    doc.Add(Field.Keyword("id",myred["id"].ToString()));
                    doc.Add(Field.Text("title",myred["title"].ToString()));
                    doc.Add(Field.Text("content",myred["content"].ToString()));
                    writer.AddDocument(doc);
                                    
                }
                writer.Optimize();
                writer.Close();
            }
            catch(Exception e)
            {
               Response.Write(e);
            }
            return writer;
        }

        public Hits seacher(String queryString)
        {
            Hits hits=null;
            try
            {
                IndexSearcher mysea=new IndexSearcher("c:/index/");
                Query query=QueryParser.Parse(queryString,"content",new ChineseAnalyzer());
                hits=mysea.Search(query);
            }
            catch(Exception e)
            {
               Response.Write(e);
            }
            return hits;
        }


        Web 窗體設計器生成的代碼

        private void Search_Click(object sender, System.EventArgs e)
        {
            DataRow myrow;
            DataTable mytab=new DataTable();
            mytab.Columns.Add("id");
            mytab.Columns.Add("title");
            mytab.Columns.Add("content");
            mytab.Clear();

            Hits myhit=seacher(this.tj.Text.Trim());

            if (myhit!=null)
            {
                for(int i=0;i<myhit.Length();i++)
                {
                    Document doc=myhit.Doc(i);
                    myrow=mytab.NewRow();
                    myrow[0]=doc.Get("id").ToString();
                    myrow[1]=doc.Get("title").ToString();
                    myrow[2]=doc.Get("content").ToString();
                    mytab.Rows.Add(myrow);
                    myrow.AcceptChanges();
                }
            

                this.SearGrid.DataSource=mytab;
                this.SearGrid.DataBind();
            }
            else
            {
                //

            }
            

        
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章