This topic explains how to create multiple indexes at the same time in VMware Tanzu GemFire.
In order to speed and promote efficiency when creating indexes, you can define multiple indexes and then create them all at once.
Defining multiple indexes before creating them speeds up the index creation process by iterating over region entries only once.
You can define multiple indexes of different types at once by specifying the --type
parameter at definition time.
To define multiple indexes, you can use gfsh
or the Java API:
gfsh example:
gfsh> define index --name=myIndex1 --expression=exp1 --region=/exampleRegion
gfsh> define index --name=myIndex2 --expression="c.exp2" --region="/exampleRegion e, e.collection1 c"
gfsh> create defined indexes
If index creation fails, you may receive an error message in gfsh
similar to the following:
gfsh>create defined indexes
Exception : org.apache.geode.cache.query.RegionNotFoundException ,
Message : Region ' /r3' not found: from /r3Occurred on following members
1. india(s1:17866)<v1>:27809
Java API example:
Cache cache = new CacheFactory().create();
QueryService queryService = cache.getQueryService();
queryService.defineIndex("name1", "indexExpr1", "regionPath1");
queryService.defineIndex("name2", "indexExpr2", "regionPath2");
queryService.defineKeyIndex("name4", "indexExpr4", "regionPath2");
List<Index> indexes = queryService.createDefinedIndexes();
If one or more index population fails, Tanzu GemFire collect the Exceptions and continues to populate the rest of the indexes. The collected Exceptions
are stored in a Map of index names and exceptions that can be accessed through MultiIndexCreationException
.
Index definitions are stored locally on the gfsh
client. If you want to create a new set of indexes or if one or more of the index creations fail, you might want to clear the definitions stored by using clear defined indexes
command. The defined indexes can be cleared by using the Java API:
queryService.clearDefinedIndexes();
Or by using gfsh
:
gfsh> clear defined indexes