簡単な答えは、少なくともシャード識別子プロバイダの外からではなく、そのメソッドを呼び出す必要はありません。すべて自動です。
長い答え:シャードは、シャード内の最初のエンティティが検出されるたびに自動的に追加されるはずです。
addShard
方法がprotected
である理由です:あなたのシャード識別子プロバイダの名前から判断
public static class SiteIdShardIdentifierProvider extends ShardIdentifierProviderTemplate {
@Override
public String getShardIdentifier(Class<?> entityType, Serializable id, String idAsString, Document document) {
if (entityType.equals(MyEntityAssociatedWithASite.class)) {
final String siteId = document.getField("site.id").stringValue();
addShard(siteId);
return siteId;
}
throw new RuntimeException("MyEntityAssociatedWithASite expected but found " + entityType);
}
}
、それがシャードとして、サイトのIDを使用しています。このように、シャード識別子プロバイダ内から呼び出されますID(上の例の行に沿ったもの)なので、新しいシャードを追加するために何もする必要はありません。新しいサイトIDを使用して新しいエンティティをインデックス登録するとすぐに追加する必要があります。これで問題が解決しない場合は、あなたのシャードIDプロバイダのコードに問題がある可能性があります。
についても説明Hibernateの検索のマニュアルを参照してくださいどのようにShardIdentifierProviderTemplate
作品:https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#advanced-features-dynamic-sharding