최근 ShardIdentifierProvider가 구현되었습니다. 잘 작동합니다. 그러나 쿼리에 대해 하나의 공유 만 사용하는 방법은 무엇입니까?검색어에 샤드를 선택하는 방법은 무엇입니까?
public class SiteIdAsShardIdProvider extends ShardIdentifierProviderTemplate {
@Override
protected Set<String> loadInitialShardNames(Properties properties, BuildContext buildContext) {
ServiceManager serviceManager = buildContext.getServiceManager();
SessionFactory sessionFactory = serviceManager.requestService(HibernateSessionFactoryServiceProvider.class, buildContext);
Session session = sessionFactory.openSession();
try {
@SuppressWarnings("unchecked")
List<String> ids = session.createSQLQuery("select cast(id as CHAR(3)) from website").list();
return new HashSet<>(ids);
} finally {
session.close();
}
}
@Override
public String getShardIdentifier(Class<?> entityType, Serializable id, String idAsString, Document document) {
return document.getFieldable("siteId").stringValue();
}
}
IndexShardingStrategy이되지 않습니다. ShardIdentifierProviderTemplate이 구현되었습니다. IndexShardingStrategy 대신 ShardIdentifierProviderTemplate을 Filter와 함께 사용할 수 있습니까? – hurelhuyag