以下是笔者研究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;
}
}
}
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;
}
}
}