Class OmReindexer

java.lang.Object
com.easydesk.lucene.om.OmReindexer

@Component public class OmReindexer extends Object
DB 의 모든 AttributeValue, Attachment, Query 를 다시 index 한다.

이전 Lucene (4.x) index 는 Lucene 10 에서 읽을 수 없으므로 처음 전환할 때, 또는 index 가 DB 와 맞지 않을 때 사용한다.

  • primary key 순서로 easydesk.lucene.om.reindex-batch-size (기본 500) 건씩 읽는다. (keyset paging)
  • 삭제(removed) 된 행은 읽지 않는다. clear=true 로 실행하면 기존 document 를 먼저 모두 지운다.
  • 개별 객체의 index 오류는 건너뛰고 수를 센다.
  • easydesk.lucene.om.reindex-on-startup=true 이면 Spring context 가 뜬 뒤 background thread 에서 전체 re-index (clear) 를 한 번 실행한다.
같은 시간에 하나의 re-index 만 실행된다.
  • Constructor Details

    • OmReindexer

      public OmReindexer(OmIndexer omIndexer, SearchService searchService, @Value("${easydesk.lucene.om.reindex-batch-size:500}") int batchSize, @Value("${easydesk.lucene.om.reindex-on-startup:false}") boolean onStartup)
      Creates a new OmReindexer.
      Parameters:
      omIndexer - 동기 indexer
      searchService - commit/deleteAll 용
      batchSize - page size
      onStartup - context 가 뜬 뒤 전체 re-index 를 실행할지
  • Method Details

    • onContextRefreshed

      @EventListener public void onContextRefreshed(org.springframework.context.event.ContextRefreshedEvent event)
      easydesk.lucene.om.reindex-on-startup=true 이면 background 로 전체 re-index 를 실행한다.
      Parameters:
      event - context refreshed
    • startAsync

      public boolean startAsync(boolean clear)
      background thread 에서 전체 re-index 를 시작한다. (관리 화면 버튼 등)
      Parameters:
      clear - true 이면 기존 document 를 먼저 모두 지운다.
      Returns:
      시작하였으면 true, 이미 실행 중이면 false
    • getStatus

      public OmReindexer.Status getStatus()
      Returns:
      마지막 (또는 현재) 실행 상태
    • isRunning

      public boolean isRunning()
      Returns:
      re-index 가 실행 중인지
    • reindexAll

      public Map<String,OmReindexer.Count> reindexAll(boolean clear) throws Exception
      전체 re-index 를 실행한다.
      Parameters:
      clear - true 이면 기존 document 를 먼저 모두 지운다.
      Returns:
      대상 이름 → 결과
      Throws:
      Exception - DB 또는 index 오류
      IllegalStateException - 이미 실행 중인 경우
    • reindex

      public <T> OmReindexer.Count reindex(String name, OmReindexer.Pager<T> pager, ToLongFunction<T> idOf) throws Exception
      한 대상을 page 단위로 re-index 한다.
      Type Parameters:
      T - OM type
      Parameters:
      name - log 용 이름
      pager - page loader
      idOf - primary key
      Returns:
      결과
      Throws:
      Exception - DB 또는 index 오류