2014-12-30 1 views
2

내 요구 사항 각 인덱스마다 세입자가 이미 최대 절전 모드를 MultiTenant로 구성 했으므로 다른 인덱스로 데이터베이스를 세분화해야합니다. 나는 동적 인 전략을 보았다. 그러나 요구 사항은 역동적이다. 각 입주자 존재에 대한 사전 정보없이 n 개의 파편을 가질 수 있습니다. 내 인덱서도 그런 식으로 일해야합니다. 인덱스를 가져 오는 최대 절전 모드 요청을 발견하면 항상 해당 테넌트를 인덱싱 한 다음 인덱스를 검색해야합니다.최대 절전 모드 MultiTenancy 검색

어떻게 할 수 있습니까? ??

아무도 나에게 몇 가지 예를 들려 줄 수 있습니까? Hibernate 문서 링크 또는 심지어 최대 절전 모드 검색을위한 Jboss doc 링크를 제공하지 마십시오.

<bean depends-on="dataSource" id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="databasePlatform" value="org.hibernate.dialect.SQLServerDialect" /> 
      <property name="generateDdl" value="true"></property> 
      <property name="showSql" value="true" /> 
     </bean> 
    </property> 
    <property name="packagesToScan" value="xxx.xxxx..xxx." /> 
    <property name="persistenceUnitName" value="xxxxxx" /> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop> 
      <prop key="hibernate.search.default.directory_provider">filesystem</prop> 
      <prop key="hibernate.search.default.indexBase">C:\xxxxx\indexes</prop> 

     </props> 
    </property> 
</bean> 

지금 당신이가 org.hibernate.Session을 사용할 수있다 : 예를 들어 다음과 같이 당신이 당신의 애플리케이션 컨텍스트에 섹션의 EntityManager의 최대 절전 모드 검색의 속성을 추가해야합니다 특정 세입자하는 색인 ​​

+0

그래서 당신은 Hibernate Search의 동적 샤딩 문서를보고 읽었다 고 말하고 있습니다. 당신은 ShardIdentifierProvider와 문서에 주어진 예제를 보았습니까? 동적 공유를 사용하면 새 파편을 즉시 만들 수 있습니다. 왜 유스 케이스에 맞지 않습니까? – Hardy

+0

나는 그것을 읽는다. 그것은 맞습니다. Bt 내 요구 사항은 또한 나는 각각의 세입자도 동적 파편 수 있습니다. –

+0

Hi Hardy, 최대 절전 모드 검색을 연구했지만 현재 직면하고있는 문제는 동적 샤딩 전략을 시도 할 때입니다. 검색 쿼리를 실행 중입니다. 하지만 코드에 따라 데이터를 인덱싱하지 않습니다. FullTextSession 다음과 같습니다. fullTextSession = Search.getFullTextSession (getCurrentSession()); fullTextSession.createIndexer(). startAndWait(); –

답변

0

다음과 같은 특정 세입자에 대한 검색을 수행 할 세입자를 식별 :

EntityManager manager = managerFactory.createEntityManager(); 

SessionImpl i = (SessionImpl) manager.getDelegate(); 
SessionFactory session = i.getSessionFactory(); 

Session s = session.withOptions().tenantIdentifier(xxxxx).openSession(); 

FullTextSession fullTextSession = org.hibernate.search.Search.getFullTextSession(s); 
return fullTextSession; 

각 검색은 사용자가 제공하는을 구체적으로 세입자를 사용하지만, 저를위한 것입니다 이런 식으로 보인다는 세입자를 얻는 방법을 또 다른 문제가 있음 , 제 경우에는 ident에 url을 사용합니다. 세입자 인 경우, 사용자가 사용하도록 테넌트를 선택했다면 필요한 정보를 정적 변수로 가져 와서 필요할 때 사용할 수 있습니다.