lucene.net3.0.3使用例子
发布日期:2013-03-29 16:42:37
using System;using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Lucene.Net.Analysis;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Documents;
using Lucene.Net.Index;
using Lucene.Net.QueryParsers;
using Lucene.Net.Search;
using Lucene.Net.Util;
namespace Lucene3Test
{
class Program
{
static void Main(string[] args)
{
Token();
CreateIndex();
Search();
Console.WriteLine(Lucene.Net.Util.Version.LUCENE_30);
Console.ReadKey();
}
// 分词
static void Token()
{
Console.WriteLine("测试分词");
Lucene.Net.Analysis.Standard.StandardAnalyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
string str = "my name is julian.zhu,欢迎访问我的个人网站www.zhuzhusoft.com";
System.IO.StringReader reader = new System.IO.StringReader(str);
Lucene.Net.Analysis.TokenStream ts = analyzer.TokenStream(str, reader);
bool hasNext = ts.IncrementToken();
Lucene.Net.Analysis.Tokenattributes.ITermAttribute ita;
while (hasNext)
{
ita = ts.GetAttribute<Lucene.Net.Analysis.Tokenattributes.ITermAttribute>();
Console.Write(ita.Term + "|");
hasNext = ts.IncrementToken();
}
Console.WriteLine();
ts.CloneAttributes();
reader.Close();
analyzer.Close();
}
// 创建索引
static void CreateIndex()
{
Console.WriteLine("测试创建索引");
Analyzer analyzer = null;
analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
DirectoryInfo dirInfo = Directory.CreateDirectory("LuceneIndex");
Lucene.Net.Store.Directory directory = Lucene.Net.Store.FSDirectory.Open(dirInfo);
IndexWriter writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
CreateIndex(writer, "小周", "21", "网管");
CreateIndex(writer, "小朱", "29", "程序员");
CreateIndex(writer, "小王", "20", "网页设计师");
CreateIndex(writer, "小沈", "24", "平面设计师");
CreateIndex(writer, "小范", "25", "程序员");
writer.Optimize();
writer.Dispose();
}
static void CreateIndex(IndexWriter writer, string title, string age, string content)
{
try
{
Document doc = new Document();
doc.Add(new Field("name", title, Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("age", age, Field.Store.YES, Field.Index.NO));
doc.Add(new Field("job", content, Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("createdate", DateTime.Now.AddMonths(-1).ToString("yyyyMMdd"), Field.Store.YES, Field.Index.ANALYZED));//存储且索引
writer.AddDocument(doc);
}
catch (FileNotFoundException fnfe)
{
throw fnfe;
}
catch (Exception ex)
{
throw ex;
}
}
// 搜索
static void Search()
{
Console.WriteLine("测试搜索");
string keyword = "设计";
string field = "job";
Analyzer analyzer = null;
analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, field, analyzer);
Query query = parser.Parse(keyword);
int n = 1000;
DirectoryInfo dirInfo = Directory.CreateDirectory("LuceneIndex");
Lucene.Net.Store.Directory directory = Lucene.Net.Store.FSDirectory.Open(dirInfo);
IndexSearcher searcher = new IndexSearcher(directory, true);
TopDocs docs = searcher.Search(query, (Filter)null, n);
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 name = doc.Get("name");
string age = doc.Get("age");
string job = doc.Get("job");
string createdate = doc.Get("createdate");
string result = string.Format("这是第{0}个搜索结果,name为{1},age{2},createdate:{3},job:{4}", counter, name, age, createdate, job);
Console.WriteLine(result);
}
catch (Exception ex)
{
}
counter++;
}
}
}
}
}