2017-05-24 1 views
2

나는 lucene 인덱스 버전을 결정해야하는 셸 스크립트 (csh)를 작성하고 있으며이를 기반으로 인덱스를 다음 버전으로 업그레이드해야한다. 그래서 lucene 인덱스가 2.x이면 인덱스를 3.x 으로 업그레이드해야합니다. 마지막으로 인덱스를 6.x로 업그레이드해야합니다.lucene 색인 버전을 확인하는 방법은 무엇입니까?

업 그레 이드 인덱스는 순차적 인 프로세스이므로 (2.x-> 3.x-> 4.x-> 5.x-> 6.x), 인덱스 버전을 알고 있어야만 할 수 있습니다. 클래스 경로를 올바르게 설정하고 업그레이드하십시오.

도와주세요.

답변

0

이것은 매우 깨끗한 해결책은 아니지만 그게 전부입니다 SegmentInfos 통해 찾을 수 있습니다.

LuceneVersion ->이 사용 된 루씬 코드 버전 커밋 세 빈트로 작성 : 당신이

을 만들 때 버그 수정, 마이너, 메이저 당신의 IndexReader, 그것은 콘크리트 리더 클래스 중 하나입니다 - StandardDirectoryReader처럼이 클래스는 아래와 같이 toString() 메소드를 가지고 있습니다. 각 세그먼트에 대해 lucene 버전을 인쇄하고 있으므로 toString()IndexReader 인스턴스로 간단하게 호출 할 수 있습니다.

@Override public String toString() { final StringBuilder buffer = new StringBuilder(); buffer.append(getClass().getSimpleName()); buffer.append('('); final String segmentsFile = segmentInfos.getSegmentsFileName(); if (segmentsFile != null) { buffer.append(segmentsFile).append(":").append(segmentInfos.getVersion()); } if (writer != null) { buffer.append(":nrt"); } for (final LeafReader r : getSequentialSubReaders()) { buffer.append(' '); buffer.append(r); } buffer.append(')'); return buffer.toString(); }

나는 인덱스는 문서가 너무 이전 버전의 작가에서 저지른 수 있으므로 전체 인덱스에 대해 하나의 버전이 이해가되지 않는 것 같아요.

이전 버전의 루씬 버전 작성자와 커밋 된 문서는 최신 버전 리더를 사용하여 검색 할 수 있습니다. 버전 거리가 Lucene에서 정의한만큼 멀지 않은 경우입니다.

regex를 사용하여 코어 Java에서 간단한 로직을 작성하여 가장 높은 lucene 버전을 lucene 인덱스 버전으로 추출 할 수 있습니다.