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

    其实 Lucene.net 对数据库建索引很简单,只要把数据表里面的记录读出来,然后对每个字段索引就行了.本文中数据库的内容是某个博客表-userblog表。

    1.表结构:
    字段名称         字段类型         字段含义
    id                Varchar(11)          编号
    title              Varchar(50)          标题
    content         Text                    内容

    2.程序流程
    1)   打开数据库;
    2)   建立索引;
    3)    根据索引进行全文搜索.


    4.附源码:
    aspx文件:
    <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebApplication4.WebForm1" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
        <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>&nbsp;
                            <asp:textbox id="tj" runat="server"></asp:textbox><asp:button id="Search" runat="server" Text="搜索"></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>&nbsp;</td>
                                                </tr>
                                            </table>
                                        </ItemTemplate>
                                    </asp:TemplateColumn>
                                </Columns>
                            </asp:datagrid></td>
                    </tr>
                </table>
            </form>
        </body>
    </HTML>

    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)
  • 相关阅读:
    linux中的find命令——查找文件名
    int main(int argc,char* argv[])详解
    VIM进阶学习之几种模式和按键映射
    Fortran编译多个文件(转载)
    Vimdiff---VIM的比较和合并工具
    两篇很牛的vim使用技巧
    程序员软件的罪恶:从不清楚地汇报事故原因
    Free symbol is Harmful
    return语言结构 VS. scala默认返回值
    踩过的“坑”: 命令行指定Java class path
  • 原文地址:https://www.cnblogs.com/0000/p/1531698.html
Copyright © 2011-2022 走看看