這是我的代碼搜索Lucene索引,Lucene的IndexSearcher的導致OutOfMemoryException異常
String [email protected]"c:\Test1.txt";
if (File.Exists(DocPath))
{
StreamReader Reader = new StreamReader(DocPath);
StringBuilder Content = new StringBuilder();
Content.Append(Reader.ReadToEnd());
if (Content.ToString().Trim() != "")
{
FSDirectory Direc = FSDirectory.Open(new DirectoryInfo(IndexDir));
IndexReader Reader = IndexReader.Open(Direc, true);
IndexSearcher searcher = new IndexSearcher(Reader);
QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "Content", new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29, new FileInfo(Application.StartupPath + Path.DirectorySeparatorChar + "noise.dat")));
BooleanQuery.MaxClauseCount = Convert.ToInt32(Content.ToString().Length);
Query query = parser.Parse(QueryParser.Escape(Content.ToString().ToLower()));
TopDocs docs = searcher.Search(query, Reader.maxDoc);
}
}
在這段代碼中,我打開15MB的一個文本文件,並給它的索引搜索。搜索需要很長時間,顯然會引發OutOfMemoryException
。它甚至需要時間來解析查詢。索引大小約爲16K文檔。
您是否正在尋找與Test1.txt完全相同的文檔? –
是的,我正在嘗試查找與test1相同的文檔。 – user1051536
如果您嘗試查找完全匹配,我認爲您不需要在該字段上使用分析儀。這可能會大大減少查詢的大小。但是,15MB查詢可能太大了。 – goalie7960