2011-03-15 5 views
1

Lucene 색인 생성을 오프라인으로 이동하여 JMS 대기열의 conusmer가 수행하도록 진행 중입니다. 나는 모든 일을해야한다. 그것은 정확하게 색인을 생성하고 나는 새로운 상자에 색인 파일을 rsync 수 있습니다. Lucene이 새로운 색인을 사용하게하는 가장 좋은 방법은 무엇입니까? 다른 사람들이 IndexWriter를 다시 초기화하여 새 색인 파일을 사용하는 방법은 무엇입니까? 감사합니다.Lucene 색인을 다른 서버로 이동

+0

난 당신이 새로운 상자에 색인 된 모든 파일이 랬 오전 : 여기

는 그 코드입니까? – remo

+0

인덱스를 정상적으로 열 수없는 이유는 무엇입니까? (다른 옵션은 무엇입니까?) – Xodarap

답변

1

나를 따라 오는 다른 사람들을 위해, 여기에 내가 한 일이 있습니다.

목표는 JMS 사용자가 내 lucene 인덱스를 생성 한 다음 각 서버가 완료 될 때 새 인덱스를 가져 오는 것이 었습니다. 여기에 내가 찍은 단계는 다음과 같습니다

  • 야간
  • 각 서버에 새 인덱스를 업데이트하는 스크립트 updateLuceneIndex.sh를 호출하는 크론 탭을 만든 나의 새로운 인덱스를 생성하는 크론 탭을 생성는

!/bin/sh

TIME = date +%s;
rsync -av tomcat @ consumer1. * .COM :/홈/바람둥이/루씬/홈/바람둥이/루씬
에코 $ TIME
MV -f/홈/바람둥이/루씬/루씬/홈/바람둥이/루씬/$ TIME

로 이 디렉토리 이름과 타임 스탬프를 사용하여 위의 새로운 인덱스가

/home/tomcat/lucene/1300291879 
  • 처럼라는 이름의 폴더에 표시됩니다 있도록 서버 코드는/집에있는 디렉토리의 목록을 사로 잡고 참조/바람둥이/루씬 예배 규칙서.
  • 그것은 마지막 하나를 새 디렉토리의 이름을 기준으로 정렬하고 잡고 (최신)
  • 내가 작성 (하나가 손상된 경우) 지난 2
  • 을 제외한 모든 기존 인덱스를 삭제하는 것보다 서버 새로운 디렉토리를 가리키는 새로운 IndexReader

이것이 스레드 안전성인지 확실하지 않습니다. 전환 할 때 누군가가 검색을 시도하면 오류가 발생하지만 현재는 그렇게할만한 검색을하지 못한다고 상상해보십시오. 그러나 트래픽이 증가함에 따라 문제가 발생할 수있는 곳이 될 것입니다. 누구든지 더 나은 방법을 알고 있다면 조언하십시오. 오른쪽

public void initialize(File newIndexDirectory) throws CorruptIndexException, IOException { 
     try { 
      File path = (newIndexDirectory == null) ? new File(indexDirectory) : newIndexDirectory; 
      Directory index = new SimpleFSDirectory(path); 
      searcher = new IndexSearcher(index); 
      logger.debug("Successfully initialized index at: " + path.getAbsolutePath()); 
      currentIndexFile = path; 
     } catch (Exception e) { 
      logger.warn("Lucene index is corrupt"); 
     } 
    } 
+0

접근 방식을 사용한 1 년 후 어떻게 작동 했습니까? – Hirsty

관련 문제