2010-05-04 7 views
1

Как обрабатывать эту ошибку в Lucene:Java AbstractMethodError

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

ответ

0

Ok! Я нашел ответ. Это не проблема несоответствия версии. Скорее, файл FileSystemDirectory hadoop contrib, который расширяет каталог абстрактного класса, не реализовал абстрактную функцию listAll(). Функция listAll() вызывалась функцией lucene indexReader.open(). Я добавил эту функцию, и она работает и работает.

Thanks

3

AbstractMethodError может произойти только тогда, когда определение класса изменилось несовместимо, так это выглядит, как вы используете несовместимую комбинацию баночек разных частей Lucene. Попробуйте обновить все свои JAR-файлы Lucene до последней версии.

+0

Вы правы! Я использую lucene-core-3.0.0 и еще один hasoop-contrib-index.jar, который я получил с hadoop-0.19.0 год назад. Вероятно, в то время у lucene была какая-то отчаянная версия. Я попытаюсь получить новую банку для индекса hadoop-contrib. посмотрим, работает ли это. Благодаря! – Akhil

0

Другим вариантом является то, что с вашим индексом произошло что-то плохое - либо он был построен с использованием другой версии Lucene, либо отсутствует файл. Попробуйте открыть индекс, используя luke.

+2

Нет, это не могло вызвать AbstractMethodError. –

Смежные вопросы