0

这是我搜索 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 文档。

4

1 回答 1

2

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

使用您的输入来计算它的哈希并针对该哈希发出查询,并将匹配的文档与您的输入进行比较以确保相等。

它将更加健壮,并且可能也会更加高效。

于 2013-01-03T14:45:21.303 回答