исключение нулевого указателя в indexwriter.close (используется ramdirectory в движке приложения Google) - PullRequest
3 голосов
/ 23 января 2012

Я работаю над тем, чтобы индексирование lucene работало на Google App Engine. Я использую ramdirectory для создания индекса, а затем сериализую его (объект ramdirectory) в memcache и blobstore для постоянного хранения. http://code.google.com/appengine/docs/java/blobstore/overview.html#Writing_Files_to_the_Blobstore Для поиска я просто десериализирую его и использую в своих поисках.

Я сталкиваюсь с исключением нулевого указателя при закрытии индексатора.

Я думаю, это может быть связано с тем, что в движке приложений Google поддерживаются только следующие библиотеки. http://code.google.com/appengine/docs/java/jrewhitelist.html

Я использую lucene 3.5.0 и Java App Engine версии 1.6.1

Ниже приведена трассировка стека, которую я получаю

java.lang.NullPointerException
at org.apache.lucene.store.DataOutput.writeString(DataOutput.java:103)
at org.apache.lucene.store.DataOutput.writeStringStringMap(DataOutput.java:189)
at org.apache.lucene.index.SegmentInfo.write(SegmentInfo.java:623)
at org.apache.lucene.index.SegmentInfos.write(SegmentInfos.java:394)
at org.apache.lucene.index.SegmentInfos.prepareCommit(SegmentInfos.java:872)
at org.apache.lucene.index.IndexWriter.startCommit(IndexWriter.java:4601)
at org.apache.lucene.index.IndexWriter.prepareCommit(IndexWriter.java:3453)
at org.apache.lucene.index.IndexWriter.commitInternal(IndexWriter.java:3524)
at org.apache.lucene.index.IndexWriter.closeInternal(IndexWriter.java:1879)
at org.apache.lucene.index.IndexWriter.close(IndexWriter.java:1822)
at org.apache.lucene.index.IndexWriter.close(IndexWriter.java:1786)

Код работает на моем локальном компьютере правильно (я не добавил большую часть кода, просто добавил несколько примеров документов и выполнил indexwriter.close ())

Кто-нибудь сталкивался с этой проблемой раньше ?? и если так, есть ли обходной путь для этого ??

Код, в котором я нахожу проблему, прост

RAMDirectory dir = new RAMDirectory();
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
IndexWriter writer = new IndexWriter(dir,config); 
Document doc;
doc = new Document();
doc.add(new Field("text","mary had a little lamb", Store.YES, Index.ANALYZED));
writer.addDocument(doc)
writer.close();

исключение выдается, когда я пытаюсь закрыть писателя в последней строке

1 Ответ

3 голосов
/ 16 февраля 2012

проблема в том, что по какой-то причине Lucene пытается сохранить os.version и os.arch в индексе.

Я не знаю почему, однако решение добавляет свойства в ваш appengine-web.xml:

<system-properties>
    <property name="os.version" value="1.0.GAE whatever" />
    <property name="os.arch" value="GAE whatever" />
</system-properties>

, и это будет работать для вас.Надеюсь, это поможет:)

...