2

Google APP engine、使用してLucene 4.1います。

ローカルでインデックス ファイルを生成できますが、Google サーバーでは次の例外が発生します (ただし、ローカル マシンでは同じコードが正常に動作します)。

org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out:
   com.googlecode.lucene.appengine.GaeLockFactory$1@104a681

これが私のコードです:


package com.search.domain;

import java.io.IOException;
import java.util.Set;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.util.Version;

import com.domain.dataobjects.Item;
import com.googlecode.lucene.appengine.GaeDirectory;
import com.googlecode.lucene.appengine.GaeLuceneUtil;


public class ItemDataIndexWriter {

public String createIndexes(){
    IndexWriter indexWriter = null;
    GaeDirectory indexDirectory = null;
try{    
        indexDirectory = new GaeDirectory();

        StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_41 );

        IndexWriterConfig config = GaeLuceneUtil.getIndexWriterConfig(Version.LUCENE_41, analyzer);//get configuration

        config.setOpenMode(OpenMode.CREATE_OR_APPEND);
        indexWriter = new IndexWriter(indexDirectory, config);

        addToDoc(indexWriter,"test");
 }catch(Exception e){
     e.printStackTrace();
     System.out.println(e.getMessage());
     return e.toString();
 }
 finally{
     try {
        if(indexWriter!=null)
             indexWriter.close();
        if(indexDirectory!=null)
             indexDirectory.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println(e.getMessage());
    }        
 }
return "Good";
}


private static void addToDoc(IndexWriter w, String item) throws IOException {

    Document doc = new Document();
    doc.add(new TextField("item", item, Field.Store.YES));
    w.addDocument(doc);
}
}

誰でも私を案内できますか?なにが問題ですか?

4

2 に答える 2

2

に移動しGoogle AppEngine administration -> Datastore viewer、GaeLock エンティティを選択してすべてのエンティティを削除すると、何らかの理由でロックされたすべての Lucene インデックスのロックが解除されます。

気をつけて!おそらくデータストアがダーティな状態になっているため、次のすべてのエントリを削除して手動でインデックスを削除する必要があります: LuceneIndexSegment、。SegmentHunkGaeLock

陥っている問題は、Lucene AppEngine が適切に構成されていない場合に発生する可能性があります。lucene-appengine サイトで設定手順を確認してください。

于 2013-06-28T13:59:14.680 に答える