您的位置:首页 > 其它

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

2012-06-26 14:03 531 查看
/article/6999891.html

索引生成功能



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 }

100 }

101 }

102 }

103



索引修改功能



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;

10 using Version = Lucene.Net.Util.Version;

11 using Term = Lucene.Net.Index.Term;

12

13 namespace Demo

14 {

15 public partial class UpdateIndex : System.Web.UI.Page

16 {

17 public String index = "D:\\ProjectsSVN\\ChinaValueApplication\\ChinaValueSearch\\Demo\\index";

18

19 protected void Page_Load(object sender, EventArgs e)

20 {

21

22 }

23

24 protected void btnUpdate_Click(object sender, EventArgs e)

25 {

26 Boolean EnableCreate = true;

27

28 if (System.IO.File.Exists(index + "\\segments.gen"))

29 {

30 EnableCreate= false;

31 }

32

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

34

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

36

37 System.IO.FileInfo file = new System.IO.FileInfo(@"E:\work\back\Document\ksp.txt");

38 writer.UpdateDocument(new Term("path", txtID.Text.Trim()), FileDocument.Document(file));

39

40 writer.Close();

41 }

42 }

43 }

44



索引查询



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;

10 using QueryParser = Lucene.Net.QueryParsers.QueryParser;

11 using Query = Lucene.Net.Search.Query;

12 using TopScoreDocCollector = Lucene.Net.Search.TopScoreDocCollector;

13 using ScoreDoc = Lucene.Net.Search.ScoreDoc;

14 using Document = Lucene.Net.Documents.Document;

15

16 namespace Demo

17 {

18 public partial class SearchIndex : System.Web.UI.Page

19 {

20 private static String index = "D:\\ProjectsSVN\\ChinaValueApplication\\ChinaValueSearch\\Demo\\index";

21

22 protected void Page_Load(object sender, EventArgs e)

23 {

24

25 }

26 protected void btnSearch_Click(object sender, EventArgs e)

27 {

28 String field = "contents";

29

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

31

32 Searcher searcher = new IndexSearcher(reader);

33 Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);

34

35 QueryParser parser = new QueryParser(field, analyzer);

36

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

38

39 TopScoreDocCollector collector = TopScoreDocCollector.create(searcher.MaxDoc(), false);

40 searcher.Search(query, collector);

41 ScoreDoc[] hits = collector.TopDocs().scoreDocs;

42

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

44

45 for (Int32 i = 0; i < collector.GetTotalHits(); i++)

46 {

47 ltrResult.Text += "doc=" + hits[i].doc + " score=" + hits[i].score + "<br>";

48 Document doc = searcher.Doc(hits[i].doc);

49 ltrResult.Text += "Path:" + doc.Get("path") + "<br>";

50 }

51

52 reader.Close();

53 }

54 }

55 }



索引删除



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;

10

11 namespace Demo

12 {

13 public partial class DelIndex : System.Web.UI.Page

14 {

15 private static String index = "D:\\ProjectsSVN\\ChinaValueApplication\\ChinaValueSearch\\Demo\\index";

16

17 protected void Page_Load(object sender, EventArgs e)

18 {

19 }

20

21 protected void btnDel_Click(object sender, EventArgs e)

22 {

23 try

24 {

25 Directory directory = FSDirectory.Open(new System.IO.FileInfo(index));

26 IndexReader reader = IndexReader.Open(directory, false);

27

28 //// 删除所有记录

29 //for (int i = 0; i < reader.MaxDoc(); i++)

30 //{

31 // reader.DeleteDocument(i);

32 //}

33

34 if (rdlDel.SelectedValue == "1") //根据ID删除记录

35 {

36 Int32 i = Convert.ToInt32(txtID.Text);

37 reader.DeleteDocument(i);

38 ltrResult.Text = "删除成功";

39 }

40 else if (rdlDel.SelectedValue == "2") // 根据条件删除记录

41 {

42 Term term = new Term("path", txtID.Text.Trim());

43 Int32 num = reader.DeleteDocuments(term);

44 ltrResult.Text = "删除" + num.ToString() + "条记录成功";

45 }

46

47 reader.Close();

48 directory.Close();

49

50 }

51 catch (System.Exception ex)

52 {

53 ltrResult.Text = " caught a " + e.GetType() + "\n with message: " + ex.Message;

54 }

55 }

56

57 protected void btnOptimize_Click(object sender, EventArgs e)

58 {

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

60 writer.Commit();

61 writer.Optimize();

62 writer.Close();

63 }

64 }

65 }



demo

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