I am trying to configure a geospatial index for performant intersect querying on an Ignite Cache. I am able to set the field as queryable, and have set the index using the recommended syntax .setIndexes(new QueryIndex("columnName").
However, when I perform an "EXPLAIN SELECT" SqlFieldsQuery on the cache I am seeing .__SCAN instead of the indexed column. I believe this means it is scanning the entire cache instead of using the index, but could not find documentation on this.
'SELECT\n' +
' "__Z0"."EXAMPLESTRING" AS "__C0_0",\n' +
' "__Z0"."EXAMPLESPATIAL" AS "__C0_1"\n' +
'FROM "mySpatialGeometryCache"."EXTENDEDPOINT" "__Z0"\n' +
' /* mySpatialGeometryCache.EXTENDEDPOINT.__SCAN_ */\n' +
'WHERE INTERSECTS("__Z0"."EXAMPLESPATIAL", ?1)'
Here is the queryEntity I have configured:
new QueryEntity()
.setValueTypeName("ExtendedPoint")
.setFields([
new QueryField("exampleString", "java.lang.String"),
new QueryField("exampleSpatial", "java.lang.String"),
])
.setIndexes(
new Array(new QueryIndex("geo",QueryIndex.INDEX_TYPE.GEOSPATIAL))
)
);
I am not getting any errors or console warnings, and I am able to query the exampleSpatial field just fine, but I want to ensure that an index is being used so that it performs best when the cache is at a higher volume.
Follow this guide when creating indexes.
Look in the INDEXES system view to see that you've indexed the correct fields.
Use the EXPLAIN command to see which indexes the optimizer considers useful for a given query.