2012-03-29 14 views
11

Mój serwer to utrata zasilania i wskaźnik głośności został uszkodzony. I prowadzona IndexChecker ale nie:Jak naprawić uszkodzony indeks lucenu?

java -cp /home/dthoai/programs/paesia/checker/lucene-core-3.5.0.jar -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex /mnt/peda/paesia/index -fix 


Opening index @ /mnt/peda/paesia/index 

ERROR: could not read any segments file in directory 
java.io.IOException: read past EOF: MMapIndexInput(path="/mnt/peda/paesia/index/segments_ls0l") 
at org.apache.lucene.store.MMapDirectory$MMapIndexInput.readByte(MMapDirectory.java:279) 
at org.apache.lucene.store.ChecksumIndexInput.readByte(ChecksumIndexInput.java:41) 
at org.apache.lucene.store.DataInput.readInt(DataInput.java:84) 
at org.apache.lucene.store.DataInput.readLong(DataInput.java:126) 
at org.apache.lucene.index.SegmentInfo.<init>(SegmentInfo.java:202) 
at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:286) 
at org.apache.lucene.index.SegmentInfos$1.doBody(SegmentInfos.java:363) 
at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:754) 
at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:593) 
at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:359) 
at org.apache.lucene.index.CheckIndex.checkIndex(CheckIndex.java:327) 
at org.apache.lucene.index.CheckIndex.main(CheckIndex.java:1007) 

Jak mogę naprawić mój indeks Lucene?

+0

Przebudowa nie jest opcją? – Reactormonk

+0

Czy próbowałeś otworzyć indeks w Luke? http://www.getopt.org/luke/ – Mikos

Odpowiedz

8

Wygląda na to, że główny plik katalogu, segments_N jest uszkodzony. Prawdopodobnie oznacza to, że utrata zasilania nastąpiła podczas wykonywania zatwierdzenia.

Jeśli tak jest, oznacza to, że istnieje pewna szansa, że ​​starszy segmen- plik_N znajduje się w twoim katalogu, a segmenty, do których się odwołuje, są nadal aktualne i aktualne. Jeśli nie ma takiego pliku, spróbuj usunąć uszkodzony segments_ls0l plik i zobaczyć:

  • czy Lucene zarządza, aby otworzyć indeks,
  • jakich danych brakuje.

W przeciwnym razie istnieje kilka wątków, jedna lista dyskusyjna Lucene mówi o regeneracji pliku segmentów_N.

Upewnij się, aby wykonać kopię zapasową katalogu przed wykonywaniem jakichkolwiek modyfikacji.

+0

dziękuję za odpowiedź! Po prostu miałem ten sam problem i usunąłem wszystkie uszkodzone segmenty o rozmiarze 0 bajtów. Teraz wszystko wydaje się być w porządku. Martwi mnie, czy to bezpieczne usuwanie tych plików segmens_N, mimo że były to tylko pliki o wielkości 0 bajtów? – bbnn

+0

Rozwiązałem problem w ten sposób; Zatrzymaj ES. Wprowadź uszkodzony fragment '/ var/lib/elasticsearch/elasticsearch/nodes/0/indices///index'. Znajdź wszystkie puste pliki 'ls -l -S | sort -k 5 -n | head' i usuń je. Uruchom ponownie ES. – Oleander

Powiązane problemy