一.摘要
本篇文章作为Lucene.net的开篇文章向您展示在ASP.NET中的基本使用,更深入的话题比如:搜索的关键字高亮显示,索引从数据库中查询的数据,爬虫,索引更新等高级话题将在后续文章中描述.
二.内容
建立一个ASP.NET网站,添加Lucene.net.dll的引用,在Default.aspx页面里添加如下内容:
1: <%@ Page Language="C#" %>
2:
3: <%@ Import Namespace="Lucene.Net.Index" %>
4: <%@ Import Namespace="Lucene.Net.Analysis.Standard" %>
5: <%@ Import Namespace="Lucene.Net.Documents" %>
6: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
7:
8: <script runat="server">
1:
2:
3: protected void Page_Load(object sender, EventArgs e)
4: {
5: //索引位置
6: string sIndexLocation = MapPath("~/searchlucene/");
7: bool created;
8: //检测索引是否存在
9: IsIndexExists(out created, sIndexLocation);
10:
11: }
12: private void IsIndexExists(out bool created, string sIndexPath)
13: {
14: created = false;
15: if (!IndexReader.IndexExists(sIndexPath))
16: {
17: IndexWriter writer = new IndexWriter(sIndexPath, new StandardAnalyzer(), true);
18: created = true;
19: writer.Close();
20: }
21: }
22: //创建索引
23: protected void btnCreateIndex_Click(object sender, EventArgs e)
24: {
25: IndexWriter writer = new IndexWriter(MapPath("~/searchlucene/"), new StandardAnalyzer(), false);
26:
27: IndexDocument(writer, "中国", "China", "北京");
28: IndexDocument(writer, "美国", "USA", "密歇根");
29: IndexDocument(writer, "日本", "Jap", "小日本");
30: IndexDocument(writer, "中国", "China", "人均");
31: IndexDocument(writer, "2010", "情人节", "万维网");
32:
33: writer.Optimize();
34: writer.Close();
35:
36: }
37: //添加文件到索引
38: private void IndexDocument(IndexWriter writer, string sHeader, string sType, string sContent)
39: {
40: Document doc = new Document();
41:
42: doc.Add(new Field("header", sHeader, Field.Store.YES, Field.Index.TOKENIZED));
43: doc.Add(new Field("type", sType, Field.Store.YES, Field.Index.UN_TOKENIZED));
44: doc.Add(new Field("content", sContent, Field.Store.YES, Field.Index.TOKENIZED));
45:
46: writer.AddDocument(doc);
47:
48: }
49: //搜索
50: protected void btnSearch_Click(object sender, EventArgs e)
51: {
52: ListBox1.Items.Clear();
53:
54: var searcher = new Lucene.Net.Search.IndexSearcher(MapPath("~/searchlucene/"));
55: var oParser = new Lucene.Net.QueryParsers.QueryParser("content", new StandardAnalyzer());
56: string sHeader = " OR (header:" + TextBox1.Text + ")";
57: string sSearchQuery = "(" + TextBox1.Text + sHeader + ")";
58:
59: //解析搜索关键字
60: var oHitColl = searcher.Search(oParser.Parse(sSearchQuery));
61: for (int i = 0; i < oHitColl.Length(); i++)
62: {
63: Document oDoc = oHitColl.Doc(i);
64: ListBox1.Items.Add(new ListItem(oDoc.Get("header") + oDoc.Get("type") + oDoc.Get("content")));
65: }
66:
67: searcher.Close();
68: }
script>
9:
10: <html xmlns="http://www.w3.org/1999/xhtml">
11: <head id="Head1" runat="server">
12: <title>Lucene例子title>
13: head>
14: <body>
15: <form id="form1" runat="server">
16: <div>
17: div>
18: 1-
19: <asp:Button ID="btnCreateIndex" runat="server" OnClick="btnCreateIndex_Click" Text="index create" />
20: <br />
21: <br />
22: 2- <asp:TextBox ID="TextBox1" runat="server">asp:TextBox>
23: <asp:Button ID="btnSearch" runat="server" onclick="btnSearch_Click" Text="Search" />
24: <p>
25: p>
26: <p>
27: p>
28: <asp:ListBox ID="ListBox1" runat="server" Height="322px" Width="712px">asp:ListBox>
29: form>
30: body>
31: html>
在文本框中输入关键字比如:中国.将列出包含中国关键字的条目
三.源码
由于优快云上传的源码要经过审核,所以我稍后会以评论的形式提供完整版源码地址,谢谢您的访问!
187

被折叠的 条评论
为什么被折叠?



