我在上一篇关于LUCENE.NET的一些使用也说了一些,这里我再补充一些:( Lucene.net 查询 Lucene.net 读取全部索引 Lucene.net 分页 Lucene.net AND查询 Lucene.NET的合并索引)
1:读取全部索引文件: for(int iLoop=reader.MaxDoc()-1;iLoop>-1;iLoop--){
if(!reader.IsDeleted(iLoop)){//判断是否为删除
//...
}
}
reader.Close();
2:读取指定页数的记录(分页) public DataTable GetListReader(int pageI,int pPageListSize,out int pagecountI){
if(!IndexReader.IndexExists(directory))MakeInit(directory);
IndexReader reader = IndexReader.Open(directory);
pagecountI=reader.NumDocs();
DataTable DT=this.GetSegmentTable();
pageI=Math.Max(1,pageI);
int startLoopI=Math.Min(reader.NumDocs(),(pageI-1)*pPageListSize);
int stopLoopI=Math.Min(reader.NumDocs(),pageI*pPageListSize);
int trueID = -1;
for(int iLoop=reader.MaxDoc()-1;iLoop>-1;iLoop--){
if(!reader.IsDeleted(iLoop)){
++trueID;
//System.Web.HttpContext.Current.Response.Write(trueID);
if(trueID>stopLoopI )break;
if(trueID>=startLoopI && trueID<stopLoopI){
DataRow dr=DT.NewRow();
dr[1]=Model.TUtility.CInt(reader.Document(iLoop).Get("ID"));
dr[2]=Model.TUtility.CInt(reader.Document(iLoop).Get("UserID"));
dr[3]=reader.Document(iLoop).Get("UserName");
dr[4]=Model.TUtility.CInt(reader.Document(iLoop).Get("CatID"));
dr[5]=reader.Document(iLoop).Get("Title");
dr[6]=DateField.StringToDate(reader.Document(iLoop).Get("Time"));
DT.Rows.Add(dr);
}
}
}
reader.Close();
//IndexReader.Unlock(directory);
return DT;
}
3:Lucene.NET的AND 查询和OR查询 和这篇
lucene.NET查询关键字默认设置为AND说的是一回事情,其默认是OR操作,可以修改为AND操作:
parser.SetDefaultOperator(Lucene.Net.QueryParsers.QueryParser.Operator.AND);
其效果就和“在搜索结果中查询”类似。
4:Lucene.NET的多个索引文件查询: MultiReader reader = new MultiReader(new IndexReader[] {
IndexReader.Open(System.IO.Path.Combine(Tpl.CommonSet.Get("ThreadsIndexsData"),"main")),
IndexReader.Open(System.IO.Path.Combine(Tpl.CommonSet.Get("ThreadsIndexsData"),"1")) }
);
IndexSearcher searcher = new IndexSearcher(reader);
5:Lucene.NET的合并索引: 由于其更新大文件索引的速度比较慢的,索引经常创建一些小文件索引,过一段时间需要合并:
public void MergeIndex(string from,string to){
IndexWriter indexWriter = null;
try{
//Console.WriteLine("正在合并索引文件");
indexWriter = new IndexWriter(to,analyzer, false);
//indexWriter.SetMaxFieldLength(8000);
indexWriter.SetMaxBufferedDocs(100);
indexWriter.SetMergeFactor(100);
indexWriter.SetUseCompoundFile(true);
Directory fs = FSDirectory.GetDirectory(from,false); //RAMDirectory,FSDirectory
indexWriter.AddIndexes(new Directory[]{fs});
indexWriter.Optimize();
indexWriter.Close();
}catch(Exception e){
throw new Exception("合并索引文件出错!mergeIndex()"+e.ToString());
}finally{
try{
if(indexWriter!=null) indexWriter.Close();
}catch{
}
System.IO.Directory.Delete(from,true);
System.IO.Directory.CreateDirectory(from);
}
}
本话先到这里,有空再写其他的。
天气:大雨,ccdot发表于2008-7-8 11:01:30,阅读了735次,共有个0回复.