用Lucene[1].net对数据库建立索引及搜索+

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 窗体设计器生成的代码#region Web 窗体设计器生成的代码
        override protected void OnInit(EventArgs e)
        ...{
            //
            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            //
            InitializeComponent();
            base.OnInit(e);
        }
        
        /**//// <summary>
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        /// </summary>
        private void InitializeComponent()
        ...{    
            this.Search.Click += new System.EventHandler(this.Search_Click);
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        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
            ...{
                //

            }
            

        
        }
    }
}

 

posted @ 2013-01-27 10:34  pengxianyuan  阅读(142)  评论(0编辑  收藏  举报