Для индекса над конкретным арендатором, вы должны добавить свойство поиска спящего раздела EntityManager в контексте приложения, как последовать в качестве примера:
<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 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;
Таким образом, каждый поиск будет использовать, специфические арендатора, которые вы предоставляете, но для меня, кажется, что у вас есть еще одна проблема, которая, как получить арендатора , в моем случае я использую URL для идентификации Если у вас есть арендатор, если вы все равно хотите, чтобы пользователь выбрал te tenant для использования, получите эту информацию в статической переменной, которая будет использоваться, когда это необходимо.
Итак, вы говорите, что видели и читали документацию по динамическому очерчиванию Hibernate Search. Вы взглянули на ShardIdentifierProvider и пример, приведенный в документации. Динамический обмен позволяет вам создавать новые осколки «на лету», почему это не подходит для вашего использования? – Hardy
Я прочитал. Он подходит для этого. Bt мое требование - я могу также динамически распределять каждый арендатор соответственно. –
Hi Hardy, Я изучал поиск в спящем режиме, но проблема, с которой я сталкиваюсь в настоящее время, - это когда я пытаюсь использовать динамическую стратегию ошпаривания. по поиску поискового запроса. Но он не индексирует данные по коду, как следует за FullTextSession fullTextSession = Search.getFullTextSession (getCurrentSession()); fullTextSession.createIndexer(). StartAndWait(); –