java.io.IOException: read past EOF Lucene in Java with Eclipse

2.2k views Asked by At

What i want to do : I have a local index created with Lucene and I need to get one value for all documents in the index.

My problem is I can't read the index!

My program:

public class index {
    public static void main(String[] args) {
        try {
            read();
        } catch (CorruptIndexException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void read() throws CorruptIndexException, IOException {
        System.out.println("step");     
        IndexReader r = IndexReader.open("D:/index/DEV_IdxDOSSIER/data/index");

        System.out.println("step");
        int num = r.numDocs();
        for (int i = 0; i < num; i++)
        {
            System.out.println("step3");
            Document d = r.document(i);
            System.out.println("DC_KEY: ");
            System.out.println(d.get("DC_KEY"));
        }
        /*if (!r.isDeleted(i))
        {
            Document d = r.document(i);
            System.out.println("d=" +d);
        }*/

        r.close();
        System.out.println("read doesn't work yet!");
    }
}

Here is the error I got:

step1
java.io.IOException: read past EOF
    at org.apache.lucene.store.BufferedIndexInput.refill(BufferedIndexInput.java:151)
    at org.apache.lucene.store.BufferedIndexInput.readBytes(BufferedIndexInput.java:116)
    at org.apache.lucene.store.BufferedIndexInput.readBytes(BufferedIndexInput.java:92)
    at org.apache.lucene.store.ChecksumIndexInput.readBytes(ChecksumIndexInput.java:43)
    at org.apache.lucene.store.IndexInput.readString(IndexInput.java:124)
    at org.apache.lucene.index.SegmentInfo.<init>(SegmentInfo.java:148)
    at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:234)
    at org.apache.lucene.index.DirectoryIndexReader$1.doBody(DirectoryIndexReader.java:95)
    at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:653)
    at org.apache.lucene.index.DirectoryIndexReader.open(DirectoryIndexReader.java:115)
    at org.apache.lucene.index.IndexReader.open(IndexReader.java:316)
    at org.apache.lucene.index.IndexReader.open(IndexReader.java:206)
    at indexation.index.read(index.java:152)
    at indexation.index.main(index.java:49)

PS: I'm new on Lucene. I started 1 day ago and this is for a job.

2

There are 2 answers

3
hugh On BEST ANSWER

I succeeded:

public static void read() throws IOException {
    System.out.println("Etape1");
    File indexDirectory = new File("D:/index/DEV_IdxDOSSIER/data/index");
    IndexReader r = IndexReader.open(FSDirectory.open(indexDirectory));
    System.out.println("Etape2");
    int num = r.numDocs();
    int nbrUA = 0 ;
    for (int i = 0; i < num; i++) {
        Document d = r.document(i);
        System.out.println("DC_KEY: " + d.get("DC_KEY"));
        try {
            FileWriter fw = new FileWriter("D:\\index\\test.txt", true);
            BufferedWriter output = new BufferedWriter(fw);
            if (d.get("DC_KEY") != null) {
                output.write(d.get("DC_KEY") + "\r\n");
                System.out.println("fichier mis à jour");
            } else {
                System.out.println("Le DC_KEY est null c'est une Unité d'Archive");
                nbrUA++;
            }
            output.flush();
            output.close();

        } catch (IOException ioe) {
            System.out.println("the fonction write didn't Work, here is the Error");
            ioe.printStackTrace();
        } catch (NullPointerException ioe) {
            System.out.println("Erreur : pointeur null");
            System.out.println("the fonction write didn't Work, here is the Error");
            ioe.printStackTrace();
        }
        System.out.println("nombre de document traité : " + (i + 1) + "\r\n");
    }
    r.close();
    System.out.println("nombre d'Unité d'Archive : " + nbrUA + "\r\n");
}

You must import lucene-core-4.4.0.jar to your library go here to read a tutorial to add lucene-core-4.4.0.

This lucene-core-4.4.0.jar may be different for you (only the 4.4.0 would change).

1
ErikHH On

There is a demo included in the Lucene distribution on how to search an index. You might want to take a look at that.