lucene.net 数据库全文索引

来源:互联网 发布:mysql数据库密码忘记 编辑:程序博客网 时间:2024/05/17 07:48

 以下是笔者研究1天后的结果,不知道对不对
但是程序可以运行了
建立索引,将索引存放在c:/index目录
ChineseAnalyzer()方法是lucene的检索方法,默认的是有4种但是没有ChineseAnalyzer
我这里的ChineseAnalyzer()是我下载的dll作者后写的应该是这样
 IndexWriter writer =  new IndexWriter("c:/index/", new ChineseAnalyzer(), true);

用document.add()方法将需要被检索的内容加入lucene自己的字段
Field.Keyword(string "可以为任意字符,这里起到一个key的作用",string "被检索的内容")
Document doc = new Document();
 doc.Add(Field.Keyword("id", myred["id"].ToString()));


源代码如下:

 

为数据库建立索引
public partial class Default2 : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{

    }

    SqlConnection con 
= null;
    DateTime start 
= DateTime.Now;
    
protected void Button1_Click(object sender, EventArgs e)
    
{
        
string connstr = "server=localhost;uid=test;pwd=111;database=yaofanzi;";
        
//获取数据库连接,生成连接对象;
        con = new SqlConnection(connstr);
        
//连接成功
        con.Open();
        CreateIndex(ExecuteQuery(
"select id,title,gongneng,chengfen,shenhe from [cp]"));
    }

    
protected void Button2_Click(object sender, EventArgs e)
    
{
        DataRow myrow;
        DataTable mytab 
= new DataTable();
        mytab.Columns.Add(
"id");
        mytab.Columns.Add(
"title");
        mytab.Columns.Add(
"gongneng");
        mytab.Columns.Add(
"chengfen");
        mytab.Columns.Add(
"shenhe");
        mytab.Clear();
        Hits myhit
=seacher("wklilong");
        Response.Write(myhit.Length());
        
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("gongneng").ToString();
                    myrow[
3= doc.Get("chengfen").ToString();
                    myrow[
4= doc.Get("shenhe").ToString();
                    mytab.Rows.Add(myrow);
                    myrow.AcceptChanges();
                }
                
            }

            
else
            
{
                Response.Write(
"Hits为空");
            }

    }

    
//获得查询结果
    public SqlDataReader ExecuteQuery(string sql)
    
{
        
//连接完成,用Command访问数据库       
        SqlCommand command = new SqlCommand(sql, con);
        ArrayList list 
= new ArrayList();
        
//用DataReader读取数据 , 输出
        SqlDataReader datareader = command.ExecuteReader();
        
return datareader;
    }

    
//建立索引
    public IndexWriter CreateIndex(SqlDataReader myred)
    
{
        IndexWriter writer 
= null;
        
try
        
{
            writer 
= new IndexWriter("c:/index/"new ChineseAnalyzer(), true);
            
//建立索引字段
            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(
"gongneng", myred["gongneng"].ToString()));
                doc.Add(Field.Text(
"chengfen", myred["chengfen"].ToString()));
                doc.Add(Field.Text(
"shenhe", myred["shenhe"].ToString())); 
                writer.AddDocument(doc);
            }
            
            writer.Optimize();
            writer.Close();
            Response.Write(
"建立索引成功");
        }

        
catch (Exception e)
        
{
            Response.Write(e.ToString());
        }

        
return writer;
    }

    
//搜索
    public Hits seacher(String queryString)
    
{
        Hits hits 
= null;        
        
try
        
{            
            IndexSearcher mysea 
= new IndexSearcher("c:/index/");
            Query query 
= QueryParser.Parse(queryString, "password"new ChineseAnalyzer());
            start 
= DateTime.Now;
            hits 
= mysea.Search(query);
            TimeSpan s 
= DateTime.Now - start;
            Response.Write(
"搜索到" + hits.Length() + "个结果,共用时:" + s.Milliseconds + "毫秒" + "<br>");
            
return hits;
        }

        
catch (Exception e)
        
{
            Response.Write(
"没有搜索到结果?:" + e.ToString());
            
return null;
        }
        
    }

}

原创粉丝点击