Lucene.net3.0.3 索引、增量索引、查询等基本操作
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using Lucene.Net.Analysis;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Documents;
using Lucene.Net.Index;
using Lucene.Net.Documents;
using Lucene.Net.Index;
using Lucene.Net.QueryParsers;
using Lucene.Net.Search;
using Lucene.Net.Util;
using Lucene.Net.Analysis.Cn;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
String indexDir = Server.MapPath("~/LuceneIndex");
Analyzer analyzer = null;
analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
DirectoryInfo dirInfo = null;
if (Directory.Exists(indexDir))
{
dirInfo = new DirectoryInfo(indexDir);
}
else
{
dirInfo = Directory.CreateDirectory(indexDir);
}
//dirInfo = Directory.CreateDirectory(indexDir);
Lucene.Net.Store.Directory directory = Lucene.Net.Store.FSDirectory.Open(dirInfo);
IndexWriter writer = null;
if (Directory.Exists(indexDir))
{
// 增量索引
writer = new IndexWriter(directory, analyzer, false, IndexWriter.MaxFieldLength.LIMITED);
}
else
{
// 创建索引
writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
}
//writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
Response.Write(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "<BR>");
for (int i = 0; i < 10; i++)
{
CreateIndex(writer, "小周", "21", "网管", "20101201153611");
CreateIndex(writer, "小朱", "29", "程序员", "20111105153611");
CreateIndex(writer, "小王", "20", "网页设计师", "20091201153611");
CreateIndex(writer, "小沈", "24", "平面设计师", "20110607153611");
CreateIndex(writer, "小范", "25", "程序员", "20110101153611");
CreateIndex(writer, "小周", "25", "销售", "20121201153611");
CreateIndex(writer, "小李", "26", "销售", "20101201153611");
}
writer.Optimize();
writer.Close();
// 删除索引
writer = new IndexWriter(directory, analyzer, false, IndexWriter.MaxFieldLength.LIMITED);
writer.DeleteDocuments(new Term("name", "周"));
writer.DeleteDocuments(new Term("name", "沈"));
writer.Commit();
writer.Close();
Response.Write(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "<BR>");
// 查询
search();
}
}
private void CreateIndex(IndexWriter writer, string title, string age, string content, string datetime)
{
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.ANALYZED));//存储且不分析不索引
doc.Add(new Field("job", content, Field.Store.YES, Field.Index.ANALYZED));//存储且索引
doc.Add(new Field("createdate", datetime, Field.Store.YES, Field.Index.ANALYZED));//存储且索引
writer.AddDocument(doc);
}
catch (FileNotFoundException fnfe)
{
throw fnfe;
}
catch (Exception ex)
{
throw ex;
}
}
public void search()
{
Analyzer analyzer = null;
analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "name", analyzer);
// 多条件查询
Query query = parser.Parse("createdate:[20100101 TO 20111230] AND age:[21 TO 25]");
// 查询结果排序
Sort sort = new Sort(new SortField("createdate", SortField.LONG));
//最多返回多少个结果
int n = 100;
DirectoryInfo dirInfo = Directory.CreateDirectory(Server.MapPath("~/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, sort);
// 无结果
if (docs == null || docs.TotalHits == 0)
{
}
else
{
string resultAll = string.Empty;
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}<BR><BR>", counter, name, age, createdate, job);
resultAll = resultAll + result + "<BR>";
}
catch (Exception ex)
{
resultAll = resultAll + ex.Message + "<BR>";
}
counter++;
}
Response.Write(resultAll);
}
}
}