2017-10-26 1 views
0

Lucene Hibernate를 사용하여 색인을 생성하려는 기존 데이터가있는 데이터베이스가 있습니다. 새로운 데이터를 만들 때, Hibernate는 그것을 인덱스하지만 질문은 : 데이터베이스의 모든 이전 데이터를 어떻게 인덱스 할 수 있습니까?lucene 최대 절전 모드 검색을 사용하여 이미 생성 된 데이터베이스를 인덱싱하는 방법

이 내 persistence.xml 파일 다음 persistence.xml file is to access entities from your DB

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="persistenceUnit" 
     transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
    <properties> 
     <property name="hibernate.dialect" value="com.zodiac.qtp.domain.MySQL5CustomInnoDBDialect"/> 
     <!-- value="create" to build a new database on each run; value="update" 
     to modify an existing database; value="create-drop" means the same as "create" 
     but also drops tables when Hibernate closes; value="validate" makes no changes 
     to the database --> 
     <property name="hibernate.format_sql" value="true"/> 
     <property name="hibernate.hbm2ddl.auto" value="update" /> 
     <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy" /> 
     <property name="hibernate.connection.charSet" value="UTF8" /> 
     <property name="hibernate.connection.characterEncoding" value="UTF8"/> 
     <property name="hibernate.show_sql" value="false" /> 
     <property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/> 
     <property name="hibernate.cache.use_second_level_cache" value="true" /> 
     <property name="hibernate.cache.use_query_cache" value="true" /> 
     <property name="hibernate.generate_statistics" value="false" /> 
     <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory" /> 
     <!-- Uncomment the following two properties for JBoss only --> 
     <!-- property name="hibernate.validator.apply_to_ddl" value="false"/--> 
     <!-- property name="hibernate.validator.autoregister_listeners" value="false"/--> 
     <property name="hibernate.search.default.directory_provider" value="org.hibernate.search.store.impl.FSDirectoryProvider"/> 
     <property name="hibernate.search.default.indexBase" value="C:\ZAM_DEV\QTPGenerator-repository\lucene-indexes-v2"/> 
    </properties> 
    </persistence-unit> 
</persistence> 
+0

고정 된 문법 및 코드 형식 – entpnerd

답변

1

간단히 말해서, 색인 생성은 자동적이다. Hibernate Search는 Hibernate ORM을 통해 지속, 갱신 또는 제거 될 때마다 모든 엔티티를 투명하게 색인화 할 것이다. 그것의 임무는 인덱스와 데이터베이스를 동기화 시켜서이 문제를 잊을 수있게하는 것입니다.

그러나 기존 응용 프로그램에서 최대 절전 모드 검색을 도입 할 때 이미 데이터베이스에있는 데이터에 대해 초기 Lucene 인덱스를 만들어야합니다.

위의 속성과 주석을 추가하고 나면 데이터베이스에 기존 데이터가있는 경우 책의 초기 배치 색인을 실행해야합니다. 인덱스를 다시 작성하여 인덱스와 데이터베이스가 동기화되어 있는지 확인하십시오. 당신은 (또한 전체 인덱스 재 구축 참조) 다음 코드 조각 중 하나를 사용하여이 작업을 수행 할 수 있습니다 : EntityManager에 (JPA)를 사용하여 인덱스

FullTextSession fullTextSession = Search.getFullTextSession(session); 
fullTextSession.createIndexer().startAndWait(); 

을 재건하기 위해 최대 절전 모드 세션을 사용하여

을 인덱스를 다시 작성하기

FullTextEntityManager fullTextEntityManager = 
Search.getFullTextEntityManager(entityManager); 
fullTextEntityManager.createIndexer().startAndWait(); 

위의 코드를 실행 한 후, 당신은 /var/lucene/indexes/example.Book 아래 루씬 인덱스를 볼 수 있어야합니다.

스토리지 경로의 루트는 구성 단계에서 지정한 hibernate.search.default.indexBase 구성 속성에 따라 다릅니다.

이제 Luke에서이 색인을 검사 할 수 있습니다. Hibernate Search 작동 방식을 이해하는 데 도움이 될 것입니다. Luke는 SQL 콘솔을 사용하여 관계형 데이터베이스에서 Hibernate ORM의 작동을 검사하는 것과 마찬가지로 색인 내용과 구조를 검사 할 수 있습니다.

0

목적. 그것은 근본적인 인덱스에 대해서는별로 말하지 않고이 파일을 사용하여 DB 인덱스를 생성 할 수 없습니다. 인덱스를 만들려면 DB 서버에 관리자로 로그온하고 적절한 CREATE INDEX 명령을 사용하여 인덱스를 만들어야합니다.