您的位置:首页 > 其它

Lucene.Net新手入门第一步

2011-09-09 12:59 381 查看
今天工作不是特别多,在逛园子的时候看到了Lucene.Net,所以自己也参照别人的
博文自己动手写了个DEMO(虽然很多是参考过来的,不过自己动手更容易记住嘛!)。废话不多说,先上个图,把以前看到的几个好的jquery插件也用上
去了(JQuery关键字高亮度、JQuery分页),不记得地址了,就没有留作者的网址。



第一步,下载DLL文件,我这里用的是2.9的版本,貌似说不更新了。

第二步,把DLL引用到你的项目中,然后就是生成索引文件。

/// <summary>
/// 执行查询语句,返回SqlDataReader
/// </summary>
/// <param name="strSQL">查询语句</param>
/// <returns>SqlDataReader</returns>
public
static
SqlDataReader ExecuteReader(
string
strSQL)
{
SqlConnection connection =
new
SqlConnection(connectionString);
SqlCommand cmd =
new
SqlCommand(strSQL,connection);
try
{
connection.Open();
SqlDataReader myReader = cmd.ExecuteReader();
return
myReader;
}
catch
(System.Data.SqlClient.SqlException e)
{
throw
new
Exception(e.Message);
}
}
  

//对数据库中的字段建立索引
public
static
IndexWriter CreateIndex(SqlDataReader myred)
{
IndexWriter writer =
new
IndexWriter(
"D:/index/"
,
new
StandardAnalyzer(),
true
);
//索引的存储位置
try
{
while
(myred.Read())
{
Document doc =
new
Document();
doc.Add(
new
Field(
"ID"
,myred[
"ID"
].ToString(),Field.Store.YES,Field.Index.UN_TOKENIZED));
//其中ID、Name、Add都是数据库中的字段名,这个应该可以看明白的吧
doc.Add(
new
Field(
"Name"
,myred[
"Name"
].ToString(),Field.Store.YES,Field.Index.TOKENIZED));
doc.Add(
new
Field(
"Add"
,myred[
"Add"
].ToString(),Field.Store.YES,Field.Index.TOKENIZED));
writer.AddDocument(doc);
}
writer.Optimize();
//优化索引
writer.Close();
myred.Close();
}
catch
(Exception e)
{
myred.Close();
}
return
writer;
}
好了,索引文件已经建好了。

第三步,查询我们需要的数据鸟。

view sourceprint?

Stopwatch sw =
new
Stopwatch();
sw.Start();
//用于测试程序消耗时间
string
path =
"D:/index/"
;
//索引存储目录
Sort sort =
new
Sort(
new
SortField(
"ID"
,SortField.DOC,
false
));
//排序
IndexSearcher searcher =
new
IndexSearcher(path);
QueryParser q =
new
QueryParser(
"Name"
,
new
StandardAnalyzer());
Query query = q.Parse(strwhere);
Hits hits = searcher.Search(query,sort);
pcount = hits.Length();
if
(hits.Length() > 0)
{
int
num = pagesize + pages * pagesize;
 
int
emdnum = pages * pagesize;
//这里是因为用到分页,采取的方式是从第几条开始,取多少条的方式来分页,页数越大,性能越差,200W条数据跳到最后页需要4M,求指教
if
(hits.Length() < num)
{
num = hits.Length();
}
for
(
int
i = emdnum; i < num; i++)
{
Document doc =hits.Doc(i);
str +=
"<p><a href=\"Show.aspx?ID="
+ doc.Get(
"ID"
) +
"\" title=\""
+ doc.Get(
"Name"
) +
"\">"
+ doc.Get(
"Name"
) +
"</a></p>"
;
}
}
searcher.Close();
sw.Stop();
str +=
"<p>搜索结果为 "
+ hits.Length() +
" 个 耗时:"
+ sw.ElapsedMilliseconds.ToString() +
"毫秒</p>"
;
这样基本查询功能就OK了。写篇博客记录下,给自己加深下印象。明天有时间还得捣鼓捣鼓分词,内置分词不是很好。

代码写的很乱,还是提供个下载。(点击下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: