문제

방금 최대 절전 모드 검색을 최대 절전 모드 응용 프로그램과 통합하기 시작했습니다. 서버를 시작할 때마다 최대 절전 모드 세션을 사용하여 데이터가 색인화됩니다.

FullTextSession fullTextSession = Search.getFullTextSession(session);
Transaction tx = fullTextSession.beginTransaction();

List books = session.createQuery("from Book as book").list();
for (Book book : books) {
    fullTextSession.index(book);
}

tx.commit(); //index is written at commit time     

매우 어색하고 서버를 시작하는 데 10 분이 걸립니다. 내가 올바른 방식으로 이것을하고 있습니까?

인덱스를 주기적으로 업데이트 할 스케줄러를 작성했습니다. 이 인덱스 항목이 자동으로 업데이트됩니까? 아니면 중복 인덱스를 생성합니까?

도움이 되었습니까?

해결책

최대 절전 모드 검색 가이드, 섹션 3.6.1에 자세히 설명 된대로 주석을 사용하는 경우 (현재 기본값으로) 매장에서 인덱싱을 시작한 리스너는 기본적으로 등록됩니다.

최대 절전 모드 검색은 최대 절전 모드 주석을 사용할 때 상자 밖으로 활성화됩니다. 어떤 이유로 든 비활성화 해야하는 경우 Hibernate.search.autoregister_listeners를 False로 설정하십시오.

손으로 켜는 방법에 대한 예 :

 hibConfiguration.setListener("post-update", new FullTextIndexEventListener());
 hibConfiguration.setListener("post-insert", new FullTextIndexEventListener());
 hibConfiguration.setListener("post-delete", new FullTextIndexEventListener());

당신이해야 할 일은 당신이

@Indexed(index = "fulltext")

주석, 그리고 사용자 안내서에 자세히 설명 된대로 필드에 세밀한 주석을 달성하십시오.

따라서 저장시 손으로 인덱싱을 시작하지 않아야합니다. 인덱싱이 활성화되기 전에 저장된 엔티티가 없다면 응용 프로그램이 시작됩니다.

"첨부 파일"이있는 객체를 저장할 때 성능 문제가 발생할 수 있으므로 엔티티를 저장하는 트랜잭션의 동일한 범위에서이를 색인하고 있습니다. 여기를 봐:

최대 절전 모드 검색 및 오프라인 텍스트 추출

이 문제를 해결하는 솔루션의 경우.

다른 팁

FSDirectoryProvider (기본값)를 사용하고 있다면 Lucene Index는 디스크에서 지속됩니다. 이것은 시작시 인덱스가 필요하지 않다는 것을 의미합니다. 기존 데이터베이스가있는 경우 FullTexTsession.Index () 기능을 사용하여 초기 색인을 생성하려는 것입니다. 그러나 이것은 응용 프로그램 시작에 있어서는 안됩니다. 일종의 트리거 URL 또는 관리자 인터페이스를 노출시키는 것을 고려하십시오. 초기 색인이 있으면 자동 인덱싱을 사용하는 것이 좋습니다. 이는 책이 작성/업데이트/삭제되면 Lucene 지수가 자동으로 업데이트됨을 의미합니다. 자동 인덱싱도 기본적으로 활성화해야합니다.

온라인 매뉴얼의 자동 및 수동 색인 섹션을 참조하는 것이 좋습니다. http://docs.jboss.org/hibernate/stable/search/reference/en/html_single

--튼튼한

현재 JPA와 함께 Hibernate Search의 자동 인덱싱을 사용하고 있으며 실제로 잘 작동합니다. 처음에 인덱스를 만들려면 다음을 호출 할 수 있습니다.

    FullTextEntityManager fullTextEntityManager = 
                    Search.getFullTextEntityManager(entityManager);

    try {
       fullTextEntityManager.createIndexer().startAndWait();
    } catch (InterruptedException e) {
       // Exception handling
    }

여기서 "EntityManager"는 Javax.Persistence.entityManager입니다. 위는 @indexed로 표시된 모든 엔티티에 대해 @field로 표시된 모든 필드를 색인합니다.

그런 다음 엔티티 관리자를 통해 모든 업데이트 등을 수행하는 한 인덱스가 자동으로 업데이트됩니다. 그런 다음 평소와 같이 검색 할 수 있지만 각 검색에서 EntityManager를 다시 만들어야합니다 (EntityManagerFactory를 사용할 수 있습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top