[c#]Lucene.Net 3.0.3.0 示例代码
using Lucene.Net.Index; using Lucene.Net.Store; using Lucene.Net.Analysis; using Lucene.Net.Analysis.Standard; using Lucene.Net.Documents; using Lucene.Net.Search; using Lucene.Net.QueryParsers; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace Lucene.Net_Test { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30); //IndexWriter writer = new IndexWriter("IndexDirectory", analyzer, true); DirectoryInfo dirInfo = System.IO.Directory.CreateDirectory("IndexDirectory"); Lucene.Net.Store.Directory directory = Lucene.Net.Store.FSDirectory.Open(dirInfo); IndexWriter writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.LIMITED); AddDocument(writer, "SQL Server 2008 的发布", "SQL Server 2008 的新特性"); AddDocument(writer, "ASP.Net MVC框架配置与分析", "而今,微软推出了新的MVC开发框架,也就是Microsoft ASP.NET 3.5 Extensions"); writer.Optimize(); writer.Dispose(); } static void AddDocument(IndexWriter writer, string title, string content) { Document document = new Document(); document.Add(new Field("title", title, Field.Store.YES, Field.Index.ANALYZED)); document.Add(new Field("content", content, Field.Store.YES, Field.Index.ANALYZED)); writer.AddDocument(document); Document doc = new Document(); } private void button2_Click(object sender, EventArgs e) { Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30); DirectoryInfo dirInfo = System.IO.Directory.CreateDirectory("IndexDirectory"); Lucene.Net.Store.Directory directory = Lucene.Net.Store.FSDirectory.Open(dirInfo); IndexSearcher searcher = new IndexSearcher(directory, true); // IndexSearcher searcher = new IndexSearcher("IndexDirectory"); MultiFieldQueryParser parser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_30, new string[] { "title", "content" }, analyzer); Query query = parser.Parse(textBox1.Text); TopDocs docs = searcher.Search(query, (Filter)null, 10); if (docs == null || docs.TotalHits == 0) { Console.WriteLine("没有结果!"); } else { int counter = 1; foreach (ScoreDoc sd in docs.ScoreDocs) { try { Document doc = searcher.Doc(sd.Doc); string title = doc.Get("title"); string content = doc.Get("content"); string job = doc.Get("job"); string createdate = doc.Get("createdate"); string result = string.Format("这是第{0}个搜索结果,标题为{1},内容{2}", counter, title, content); Console.WriteLine(result); } catch (Exception ex) { } counter++; } } /** Hits hits = searcher.Search(query); for (int i = 0; i < hits.Length(); i++) { Document doc = hits.Doc(i); Console.WriteLine(string.Format("title:{0} content:{1}", doc.Get("title"), doc.Get("content"))); } searcher.Close(); Console.ReadKey(); * **/ } } }
据说贴完代码不解释死全家,好吧。Lucene.Net 3.0.3.0 基于某个2.0版本的教程尝试。导入NET40/Lucene.Net.dll , 只有两个按钮,一个加一个查。SoEasy。