C# Lucene IndexSearcher导致OutOfMemoryException

C# Lucene IndexSearcher导致OutOfMemoryException,c#,lucene.net,C#,Lucene.net,这是我搜索Lucene索引的代码 String DocPath=@"c:\Test1.txt"; if (File.Exists(DocPath)) { StreamReader Reader = new StreamReader(DocPath); StringBuilder Content = new StringBuilder(); Content.Append(Reader.ReadToEnd()); if (Content.ToString().Tr

这是我搜索Lucene索引的代码

String DocPath=@"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个文档。

我建议您改变方法。在文档中,存储一个包含文件哈希的附加字段,例如MD5哈希

使用您的输入计算它的散列,并对该散列发出查询,然后将匹配文档与您的输入进行比较,以确定是否相等


它将更加健壮,而且可能也会更高性能。

您是否正在尝试查找与Test1.txt完全相同的文档?是的,我正在尝试查找与Test1完全相同的文档如果您尝试查找完全匹配的文档,我认为您不必在该字段上使用分析器。这可能会大大减少查询的大小。但是,可能是15MB的查询太大了。我确实使用了您的方法,但它返回0个文档。但我猜此方法将只返回100%匹配的文档。bcoz我存储哈希值并查询哈希值,因此它将返回0个文档bcoz on mdhash值匹配