Lucene.Net QueryParser抛出IOException(读取过去的eof)

时间:2013-09-18 10:48:00

标签: c# lucene.net

我有以下代码,我传递了一个搜索值和一个分析器:

private static Query Query(string searchValue, StandardAnalyzer analyzer)
{
    var queryParser = new QueryParser(Version.LUCENE_30, "Data", analyzer);
    return queryParser.Parse(searchValue);
}

Parse方法中抛出异常。

结果正确返回,所以一切正常;这只是一个恼人的例外。我想忽略它吗?它是Lucene.Net的默认行为吗?我使用的是3.0.3版本。

之前发现this帖子,但答案中提到的所有要点都不适用。索引没有损坏 - 在Luke.Net和Lucene的CheckIndex类中检查。写入权限没有问题,因为我可以写入索引,而其他任何东西都没有使用索引文件。

2 个答案:

答案 0 :(得分:8)

Lucene和Lucene.net都设计了Exceptions,用于确定代码的控制流。调试器符号运行时,您将看到异常。但是,应该在库中隔离和处理异常。如果您没有处理异常并在UI中抛出错误,那么这就是一个问题。

我实际上在非常具体的情况下删除了Lucene中的一些例外,并获得了巨大的性能提升......但我确信不建议这样做。

答案 1 :(得分:3)

Lucene.NET(版本3.0.3时)使用IOExceptions来管理解析器流的几个部分。这对性能产生了不良影响(在我的开发机器上高达90毫秒)。

好消息是,目前位于http://lucenenet.apache.org/community.html的源代码存储库中的版本似乎已删除导致此问题的特定异常。当然对我来说,这已经提高了很多性能。希望这会有所帮助。