java AbstractMethodError

如何在lucene中处理此错误:

java.lang.AbstractMethodError: org.apache.lucene.store.Directory.listAll()[Ljava/lang/String; at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:568) at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:69) at org.apache.lucene.index.IndexReader.open(IndexReader.java:316) at org.apache.lucene.index.IndexReader.open(IndexReader.java:188) 

我正在进行lucene函数调用,但遗憾的是它本身调用了某个类的抽象方法,从上面的错误可以看出这一点。 为此做了什么工作?

谢谢,Akhil

只有在类定义发生不兼容的情况下才会发生AbstractMethodError ,因此看起来您正在使用Lucene不同部分的JAR的不兼容组合。 尝试将所有Lucene JAR更新到最新版本。

另一个选择是你的索引发生了一些不好的事情 – 要么是使用不同版本的Lucene构建的,要么是文件丢失。 尝试使用luke打开索引。

好! 我找到了答案。 这不是版本不匹配的问题。 相反,扩展抽象类Directory的hadoop contrib的FileSystemDirectory没有实现抽象函数listAll()。 listAll()函数由lucene indexReader.open()函数调用。 我添加了这个function,它现在正在运行。

谢谢