您的位置:首页 > 其它

lucene.net 2.9.2 实现索引生成,修改,查询,删除功能

2010-06-30 10:46 696 查看
索引生成功能

1 using System;
2 using System.Collections.Generic;
3 using System.Web;
4 using System.Web.UI;
5 using System.Web.UI.WebControls;
6
7 using StandardAnalyzer = Lucene.Net.Analysis.Standard.StandardAnalyzer;
8 using IndexWriter = Lucene.Net.Index.IndexWriter;
9 using FSDirectory = Lucene.Net.Store.FSDirectory;
10 using Version = Lucene.Net.Util.Version;
11
12
13 namespace Demo
14 {
15 public partial class _Default : System.Web.UI.Page
16 {
17 //生成索引文件的路径
18 private static readonly System.IO.FileInfo INDEX_DIR = new System.IO.FileInfo("D:\\ProjectsSVN\\ChinaValueApplication\\ChinaValueSearch\\Demo\\index");
19
20 protected void Page_Load(object sender, EventArgs e)
21 {
22
23 }
24
25 protected void CreateIndex_Click(object sender, EventArgs e)
26 {
27 //被索引文件的路径
28 System.IO.FileInfo docDir = new System.IO.FileInfo("E:\\work\\back\\Document\\");
29
30 Boolean tmpBool2;
31
32 if (System.IO.File.Exists(docDir.FullName))
33 {
34 tmpBool2 = true;
35 }
36 else
37 {
38 tmpBool2 = System.IO.Directory.Exists(docDir.FullName);
39 }
40
41 if (!tmpBool2)
42 {
43 ltrInfo.Text = "Document directory '" + docDir.FullName + "' does not exist or is not readable, please check the path";
44 return;
45 }
46
47 System.DateTime start = System.DateTime.Now;
48
49 try
50 {
51 Boolean EnableCreate = true;
52
53 if (System.IO.File.Exists("D:\\ProjectsSVN\\ChinaValueApplication\\ChinaValueSearch\\Demo\\index\\segments"))
54 {
55 EnableCreate = false;
56 }
57
58 IndexWriter writer = new IndexWriter(FSDirectory.Open(INDEX_DIR), new StandardAnalyzer(Version.LUCENE_CURRENT), EnableCreate, IndexWriter.MaxFieldLength.LIMITED);
59 ltrInfo.Text += "Indexing to directory '" + INDEX_DIR + "'... <br>";
60 IndexDocs(writer, docDir);
61 ltrInfo.Text += "Optimizing... <br>";
62 writer.Optimize();
63 writer.Close();
64
65 System.DateTime end = System.DateTime.Now;
66 ltrInfo.Text += "生成成功" + (end.Millisecond - start.Millisecond).ToString() + " total milliseconds <br>";
67 CreateIndex.Enabled = false;
68 }
69 catch (System.IO.IOException ex)
70 {
71 ltrInfo.Text += " caught a " + ex.GetType() + "\n with message: " + ex.Message;
72 }
73 }
74
75 private void IndexDocs(IndexWriter writer, System.IO.FileInfo file)
76 {
77 if (System.IO.Directory.Exists(file.FullName))
78 {
79 System.String[] files = System.IO.Directory.GetFileSystemEntries(file.FullName);
80
81 if (files != null)
82 {
83 for (int i = 0; i < files.Length; i++)
84 {
85 IndexDocs(writer, new System.IO.FileInfo(files[i]));
86 }
87 }
88 }
89 else
90 {
91 try
92 {
93 writer.AddDocument(FileDocument.Document(file));
94 }
95 catch (System.IO.FileNotFoundException fnfe)
96 {
97 ltrInfo.Text += "FileNotFoundException: " + fnfe.Message;
98 }
99 }
}
}
}

索引修改功能

1 using System;
2 using System.Collections.Generic;
3 using System.Web;
4 using System.Web.UI;
5 using System.Web.UI.WebControls;
6
7 using IndexWriter = Lucene.Net.Index.IndexWriter;
8 using FSDirectory = Lucene.Net.Store.FSDirectory;
9 using StandardAnalyzer = Lucene.Net.Analysis.Standard.StandardAnalyzer;
using Version = Lucene.Net.Util.Version;
using Term = Lucene.Net.Index.Term;

namespace Demo
{
public partial class UpdateIndex : System.Web.UI.Page
{
public String index = "D:\\ProjectsSVN\\ChinaValueApplication\\ChinaValueSearch\\Demo\\index";

protected void Page_Load(object sender, EventArgs e)
{

}

protected void btnUpdate_Click(object sender, EventArgs e)
{
Boolean EnableCreate = true;

if (System.IO.File.Exists(index + "\\segments.gen"))
{
EnableCreate= false;
}

IndexWriter writer = new IndexWriter(FSDirectory.Open(new System.IO.FileInfo(index)), new StandardAnalyzer(Version.LUCENE_CURRENT), EnableCreate);

// System.IO.FileInfo file = new System.IO.FileInfo(txtID.Text.Trim().Replace("\\", "\\\\"));

System.IO.FileInfo file = new System.IO.FileInfo(@"E:\work\back\Document\ksp.txt");
writer.UpdateDocument(new Term("path", txtID.Text.Trim()), FileDocument.Document(file));

writer.Close();
}
}
}

索引查询

1 using System;
2
3 using FSDirectory = Lucene.Net.Store.FSDirectory;
4 using IndexReader = Lucene.Net.Index.IndexReader;
5 using Searcher = Lucene.Net.Search.Searcher;
6 using IndexSearcher = Lucene.Net.Search.IndexSearcher;
7 using Analyzer = Lucene.Net.Analysis.Analyzer;
8 using StandardAnalyzer = Lucene.Net.Analysis.Standard.StandardAnalyzer;
9 using Version = Lucene.Net.Util.Version;
using QueryParser = Lucene.Net.QueryParsers.QueryParser;
using Query = Lucene.Net.Search.Query;
using TopScoreDocCollector = Lucene.Net.Search.TopScoreDocCollector;
using ScoreDoc = Lucene.Net.Search.ScoreDoc;
using Document = Lucene.Net.Documents.Document;

namespace Demo
{
public partial class SearchIndex : System.Web.UI.Page
{
private static String index = "D:\\ProjectsSVN\\ChinaValueApplication\\ChinaValueSearch\\Demo\\index";

protected void Page_Load(object sender, EventArgs e)
{

}
protected void btnSearch_Click(object sender, EventArgs e)
{
String field = "contents";

IndexReader reader = IndexReader.Open(FSDirectory.Open(new System.IO.FileInfo(index)), true);

Searcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);

QueryParser parser = new QueryParser(field, analyzer);

Query query = parser.Parse(txtKeyWord.Text.Trim());

TopScoreDocCollector collector = TopScoreDocCollector.create(searcher.MaxDoc(), false);
searcher.Search(query, collector);
ScoreDoc[] hits = collector.TopDocs().scoreDocs;

ltrResult.Text = "共 " + collector.GetTotalHits().ToString()+" 条记录<br>";

for (Int32 i = 0; i < collector.GetTotalHits(); i++)
{
ltrResult.Text += "doc=" + hits[i].doc + " score=" + hits[i].score + "<br>";
Document doc = searcher.Doc(hits[i].doc);
ltrResult.Text += "Path:" + doc.Get("path") + "<br>";
}

reader.Close();
}
}
}

索引删除

1 using System;
2
3 using FSDirectory = Lucene.Net.Store.FSDirectory;
4 using IndexReader = Lucene.Net.Index.IndexReader;
5 using StandardAnalyzer = Lucene.Net.Analysis.Standard.StandardAnalyzer;
6 using Version = Lucene.Net.Util.Version;
7 using Directory = Lucene.Net.Store.Directory;
8 using Term = Lucene.Net.Index.Term;
9 using IndexWriter = Lucene.Net.Index.IndexWriter;

namespace Demo
{
public partial class DelIndex : System.Web.UI.Page
{
private static String index = "D:\\ProjectsSVN\\ChinaValueApplication\\ChinaValueSearch\\Demo\\index";

protected void Page_Load(object sender, EventArgs e)
{
}

protected void btnDel_Click(object sender, EventArgs e)
{
try
{
Directory directory = FSDirectory.Open(new System.IO.FileInfo(index));
IndexReader reader = IndexReader.Open(directory, false);

//// 删除所有记录
//for (int i = 0; i < reader.MaxDoc(); i++)
//{
// reader.DeleteDocument(i);
//}

if (rdlDel.SelectedValue == "1") //根据ID删除记录
{
Int32 i = Convert.ToInt32(txtID.Text);
reader.DeleteDocument(i);
ltrResult.Text = "删除成功";
}
else if (rdlDel.SelectedValue == "2") // 根据条件删除记录
{
Term term = new Term("path", txtID.Text.Trim());
Int32 num = reader.DeleteDocuments(term);
ltrResult.Text = "删除" + num.ToString() + "条记录成功";
}

reader.Close();
directory.Close();

}
catch (System.Exception ex)
{
ltrResult.Text = " caught a " + e.GetType() + "\n with message: " + ex.Message;
}
}

protected void btnOptimize_Click(object sender, EventArgs e)
{
IndexWriter writer = new IndexWriter(FSDirectory.Open(new System.IO.FileInfo(index)), new StandardAnalyzer(Version.LUCENE_CURRENT), false);
writer.Commit();
writer.Optimize();
writer.Close();
}
}
}

demo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐