diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/routing/operation/plain/PlainOperationRouting.java b/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/routing/operation/plain/PlainOperationRouting.java index 68d6154d0135b..ed982f81c0b2f 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/routing/operation/plain/PlainOperationRouting.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/routing/operation/plain/PlainOperationRouting.java @@ -49,9 +49,12 @@ public class PlainOperationRouting extends AbstractComponent implements Operatio private final HashFunction hashFunction; + private final boolean useType; + @Inject public PlainOperationRouting(Settings indexSettings, HashFunction hashFunction) { super(indexSettings); this.hashFunction = hashFunction; + this.useType = indexSettings.getAsBoolean("cluster.routing.operation.use_type", false); } @Override public ShardsIterator indexShards(ClusterState clusterState, String index, String type, String id, @Nullable String routing) throws IndexMissingException, IndexShardMissingException { @@ -159,7 +162,11 @@ protected IndexShardRoutingTable shards(ClusterState clusterState, String index, private int shardId(ClusterState clusterState, String index, String type, @Nullable String id, @Nullable String routing) { if (routing == null) { - return Math.abs(hash(type, id)) % indexMetaData(clusterState, index).numberOfShards(); + if (!useType) { + return Math.abs(hash(id)) % indexMetaData(clusterState, index).numberOfShards(); + } else { + return Math.abs(hash(type, id)) % indexMetaData(clusterState, index).numberOfShards(); + } } return Math.abs(hash(routing)) % indexMetaData(clusterState, index).numberOfShards(); } diff --git a/modules/test/integration/src/test/java/org/elasticsearch/test/integration/search/TwoInstanceUnbalancedShardsEmbeddedSearchTests.java b/modules/test/integration/src/test/java/org/elasticsearch/test/integration/search/TwoInstanceUnbalancedShardsEmbeddedSearchTests.java index 04f1262749fca..e3aacbb79d68a 100644 --- a/modules/test/integration/src/test/java/org/elasticsearch/test/integration/search/TwoInstanceUnbalancedShardsEmbeddedSearchTests.java +++ b/modules/test/integration/src/test/java/org/elasticsearch/test/integration/search/TwoInstanceUnbalancedShardsEmbeddedSearchTests.java @@ -394,6 +394,17 @@ public static class UnevenOperationRoutingStrategy extends PlainOperationRouting super(settings, null); } + @Override protected int hash(String routing) { + long lId = Long.parseLong(routing); + if (lId < 60) { + return 0; + } + if (lId >= 60 && lId < 90) { + return 1; + } + return 2; + } + @Override protected int hash(String type, String id) { long lId = Long.parseLong(id); if (lId < 60) {