zoukankan      html  css  js  c++  java
  • [转]用Lucene.net对数据库建立索引及搜索

    用Lucene.net对数据库建立索引及搜索。

    简要说一下过程,首先是从数据库里取出内容,在磁盘上建立了索引文件。之后每次进行数据检索时从索引文件中检索数据。


     
    字段名称 字段类型 字段含义
    id    varchar 编号
    title vachar 标题
    content text 内容
    aspx文件:
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestLLLL._Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>使用Lucene.net建立简单的数据库搜索程序</title>
        <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
        <meta content="C#" name="CODE_LANGUAGE">
        <meta content="JavaScript" name="vs_defaultClientScript">
        <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </head>
    <body ms_positioning="GridLayout">
        <form id="Form1" method="post" runat="server">
        <table width="100%" border="0">
            <tr>
                <td>
                     
                    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
     <asp:Button ID="Search" runat="server"
                        Text="搜索" onclick="Search_Click"></asp:Button>
                </td>
            </tr>
        </table>
        <table width="100%" border="0">
            <tr>
                <td>
                    <asp:DataGrid ID="SearGrid" runat="server" AutoGenerateColumns="False">
                        <Columns>
                            <asp:TemplateColumn>
                                <HeaderTemplate>
                                    搜索结果:
                                </HeaderTemplate>
                                <ItemTemplate>
                                    <table width="100%" border="0">
                                        <tr>
                                            <td>
                                                id:<%# DataBinder.Eval(Container.DataItem,"id") %>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>
                                                标题:
                                                <%# DataBinder.Eval(Container.DataItem,"title") %>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>
                                                内容:
                                                <%# DataBinder.Eval(Container.DataItem,"content") %>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>
                                                 
                                            </td>
                                        </tr>
                                    </table>
                                </ItemTemplate>
                            </asp:TemplateColumn>
                        </Columns>
                    </asp:DataGrid>
                </td>
            </tr>
        </table>
        </form>
    </body>
    </html>
    
     
     
    cs源文件
    namespace TestLLLL
    {
        public partial class _Default : System.Web.UI.Page
        {
            string connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("~/db1.mdb");
            protected void Page_Load(object sender, EventArgs e)
            {
                //OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("~/check.mdb"));       
                if (!IsPostBack)
                {
                    //打开数据库表
                    OleDbDataReader myred = OpenTable();
                    //建立索引
                    IndexWriter writer = CreateIndex(myred);
                }
            }
    
            public OleDbDataReader OpenTable()
            {
                OleDbConnection mycon = new OleDbConnection(connstr);
                mycon.Open();
                OleDbCommand mycom = new OleDbCommand("select id,title,content from userblog order by id", mycon);
                return mycom.ExecuteReader();
            }
    
            public IndexWriter CreateIndex(OleDbDataReader 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 queryKey, string queryContent)
            {
                Hits hits = null;
                try
                {
                    IndexSearcher mysea = new IndexSearcher("c:/index/");
                    Query query = QueryParser.Parse(queryContent, queryKey, new ChineseAnalyzer());
                    hits = mysea.Search(query);
                }
                catch (Exception e)
                {
                    Response.Write(e);
                }
                return hits;
            }
    
            protected void Search_Click(object sender, 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("title", TextBox1.Text);
                Document doc;
                if (myhit != null)
                {
                    for (int i = 0; i < myhit.Length(); i++)
                    {
                        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();
    
            }
        }
    }
    
  • 相关阅读:
    史上最全的浏览器 CSS & JS Hack 手册
    JavaScript1.6数组新特性和JQuery的几个工具方法
    用jquery循环map
    javascript强大的日期函数
    用 javascript 判断 IE 版本号
    常见排序算法基于JS的实现
    JavaScript中callee,caller,argument的理解
    apply()方法和call()方法
    虽然我们可能不想对元素应用3D变换,可我们一样可以开启3D引擎
    在移动端上加上代码,让字体变得平滑
  • 原文地址:https://www.cnblogs.com/cxeye/p/2338904.html
Copyright © 2011-2022 走看看