2016-12-11 6 views
0

ShardIdProviderにプロパティファイルを設定しました。シャードIDをShardIdentifierProviderに追加する方法は?

hibernate.search.default.sharding_strategy=com.sodonsolution.portalcms3.search.SiteIdAsShardIdProvider 

次に、実行中にシャードIDを追加する必要があります。 ShardIdentifierProviderTemplate.addShardメソッドが存在しますが、どうすればアクセスできますか?

答えて

0

簡単な答えは、少なくともシャード識別子プロバイダの外からではなく、そのメソッドを呼び出す必要はありません。すべて自動です。

長い答え:シャードは、シャード内の最初のエンティティが検出されるたびに自動的に追加されるはずです。

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

関連する問題