The GeoGig indexing web API allows for the creation, updating, and listing of spatial indexes on feature trees within the repository.
Creates a new index on a specified feature tree using a geometry attribute in that tree. Extra attributes may also be specified in order to improve query performance when the data is filtered on those attributes.
PUT /repos/<repo>/index/create[.xml|.json]?treeRefSpec=<treeRefSpec>[&geometryAttributeName=<attributeName>][[&extraAttributes=<attributeName>]+][&indexHistory=<true|false>][&bounds=<minx,miny,maxx,maxy>]
treeRefSpec: Mandatory. Defines the ref spec that resolves to the feature tree that should be indexed (e.g. HEAD:Points
, Points
, etc). If no commit is defined, HEAD
will be used.
geometryAttributeName: Optional. Defaults to the primary geometry attribute on the feature type. The name of the attribute that should be used for indexing.
extraAttributes: Optional. An extra attribute that should be stored in the index to improve performance when filtering on those attributes. This can be defined multiple times if there should be multiple extra attributes.
indexHistory: Optional. Boolean indicating whether or not index trees should be built for every commit in the history of the repository. By default only the feature tree in commit indicated by the treeRefSpec
will be indexed.
bounds: Optional. String indicating the max bounds of the spatial index. If not specified, the bounds will be set to the extent of the coordinate reference system of the geometry attribute.
$ curl -X PUT -v "http://localhost:8182/repos/repo1/index/create?treeRefSpec=Points" | xmllint --format -
< HTTP/1.1 201 Created
< Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
<success>true</success>
<index>
<treeName>Points</treeName>
<attributeName>the_geom</attributeName>
<indexType>QUADTREE</indexType>
<bounds>Env[-180,180,-90,90]</bounds>
</index>
<indexedTreeId>b3340540d2098ec33b7edab1b38d3ffc18f8e162</indexedTreeId>
</response>
$ curl -X PUT -v "http://localhost:8182/repos/repo1/index/create?treeRefSpec=Points&extraAttributes=ip&extraAttributes=sp" | xmllint --format -
< HTTP/1.1 201 Created
< Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
<success>true</success>
<index>
<treeName>Points</treeName>
<attributeName>the_geom</attributeName>
<indexType>QUADTREE</indexType>
<bounds>Env[-180,180,-90,90]</bounds>
<extraAttribute>ip</extraAttribute>
<extraAttribute>sp</extraAttribute>
</index>
<indexedTreeId>b3340540d2098ec33b7edab1b38d3ffc18f8e162</indexedTreeId>
</response>
$ curl -X PUT -v "http://localhost:8182/repos/repo1/index/create?treeRefSpec=Points&bounds=-60,-45,60,45" | xmllint --format -
< HTTP/1.1 201 Created
< Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
<success>true</success>
<index>
<treeName>Points</treeName>
<attributeName>the_geom</attributeName>
<indexType>QUADTREE</indexType>
<bounds>Env[-60,60,-45,45]</bounds>
</index>
<indexedTreeId>b3340540d2098ec33b7edab1b38d3ffc18f8e162</indexedTreeId>
</response>
Updates an index to contain a different set of extra attributes.
POST /repos/<repo>/index/update[.xml|.json]?treeRefSpec=<treeRefSpec>[&geometryAttributeName=<attributeName>][[&extraAttributes=<attributeName>]+][&indexHistory=<true|false>][&add|overwrite=<true|false>]
treeRefSpec: Mandatory. Defines the ref spec that resolves to the feature tree that is already indexed (e.g. HEAD:Points
, Points
, etc). If no commit is defined, HEAD
will be used.
geometryAttributeName: Optional. Defaults to the primary geometry attribute on the feature type. The name of the attribute that is used on the existing index.
extraAttributes: Optional. An extra attribute that should be stored in the index to improve performance when filtering on those attributes. This can be defined multiple times if there should be multiple extra attributes.
indexHistory: Optional. Boolean indicating whether or not index trees should be rebuilt for every commit in the history of the repository. By default only the feature tree in commit indicated by the treeRefSpec
will be re-indexed.
add: Optional. If extra attributes already exist on the index, you must specify either add
or overwrite
to inform the operation on how to handle combining the new attributes with the old. If add
is specified, any new attributes that do not already exist on the index will be added.
overwrite: Optional: See add
. If overwrite
is specified, the extra attributes in the indexed will be replaced with those specified in the parameters. If no extra attributes are supplied, all extra attributes will be removed from the index.
bounds: Optional. String indicating the new max bounds of the spatial index.
If the index does not contain any extra attributes, you do not need to specify add
or overwrite
.
$ curl -X POST -v "http://localhost:8182/repos/repo1/index/update?treeRefSpec=Points&extraAttributes=ip" | xmllint --format -
< HTTP/1.1 201 Created
< Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
<success>true</success>
<index>
<treeName>Points</treeName>
<attributeName>the_geom</attributeName>
<indexType>QUADTREE</indexType>
<bounds>Env[-180,180,-90,90]</bounds>
<extraAttribute>ip</extraAttribute>
</index>
<indexedTreeId>b3340540d2098ec33b7edab1b38d3ffc18f8e162</indexedTreeId>
</response>
In this case Points already has an extra attribute of sp
. If we want to add ip
we need to specify the add
parameter to indicate that we don't want to remove the existing extra attribute.
$ curl -X POST -v "http://localhost:8182/repos/repo1/index/update?treeRefSpec=Points&extraAttributes=ip&add=true" | xmllint --format -
< HTTP/1.1 201 Created
< Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
<success>true</success>
<index>
<treeName>Points</treeName>
<attributeName>the_geom</attributeName>
<indexType>QUADTREE</indexType>
<bounds>Env[-180,180,-90,90]</bounds>
<extraAttribute>ip</extraAttribute>
<extraAttribute>sp</extraAttribute>
</index>
<indexedTreeId>b3340540d2098ec33b7edab1b38d3ffc18f8e162</indexedTreeId>
</response>
In this case Points already has an extra attribute of sp
. If we want to remove all extra attributes, we can specify the overwrite
parameter and not supply any extra attributes.
$ curl -X POST -v "http://localhost:8182/repos/repo1/index/update?treeRefSpec=Points&overwrite=true" | xmllint --format -
< HTTP/1.1 201 Created
< Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
<success>true</success>
<index>
<treeName>Points</treeName>
<attributeName>the_geom</attributeName>
<indexType>QUADTREE</indexType>
<bounds>Env[-180,180,-90,90]</bounds>
</index>
<indexedTreeId>b3340540d2098ec33b7edab1b38d3ffc18f8e162</indexedTreeId>
</response>
$ curl -X POST -v "http://localhost:8182/repos/repo1/index/update?treeRefSpec=Points&bounds=-60,-45,60,45" | xmllint --format -
< HTTP/1.1 201 Created
< Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
<success>true</success>
<index>
<treeName>Points</treeName>
<attributeName>the_geom</attributeName>
<indexType>QUADTREE</indexType>
<bounds>Env[-60,60,-45,45]</bounds>
</index>
<indexedTreeId>b3340540d2098ec33b7edab1b38d3ffc18f8e162</indexedTreeId>
</response>
Rebuilds the index trees for the full history of a feature type. This is generally only used when an index has been created or updated without the indexHistory
paramater. This command provides a way to do that operation if the need arises after the index has been created.
POST /repos/<repo>/index/rebuild[.xml|.json]?treeRefSpec=<treeRefSpec>[&geometryAttributeName=<attributeName>]
treeRefSpec: Mandatory. Defines the ref spec that resolves to the feature tree that is already indexed (e.g. HEAD:Points
, Points
, etc). If no commit is defined, HEAD
will be used.
geometryAttributeName: Optional. Defaults to the primary geometry attribute on the feature type. The name of the attribute that is used on the existing index.
$ curl -X POST -v "http://localhost:8182/repos/repo1/index/rebuild?treeRefSpec=Points" | xmllint --format -
< HTTP/1.1 201 Created
< Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
<success>true</success>
<treesRebuilt>4</treesRebuilt>
</response>
Lists the indexes that have been built for a repository.
GET /repos/<repo>/index/list[.xml|.json][?treeName=<treeName>]
treeName: Optional. Defines the tree name of a feature tree in the repository. Only indexes on that feature tree will be listed.
$ curl -v "http://localhost:8182/repos/repo1/index/list" | xmllint --format -
< HTTP/1.1 200 OK
< Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
<success>true</success>
<index>
<treeName>Points</treeName>
<attributeName>the_geom</attributeName>
<indexType>QUADTREE</indexType>
<bounds>Env[-180,180,-90,90]</bounds>
</index>
<index>
<treeName>Lines</treeName>
<attributeName>the_geom</attributeName>
<indexType>QUADTREE</indexType>
<bounds>Env[-180,180,-90,90]</bounds>
</index>
</response>
$ curl -v "http://localhost:8182/repos/repo1/index/list?treeName=Points" | xmllint --format -
< HTTP/1.1 200 OK
< Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
<success>true</success>
<index>
<treeName>Points</treeName>
<attributeName>the_geom</attributeName>
<indexType>QUADTREE</indexType>
<bounds>Env[-180,180,-90,90]</bounds>
</index>
</response>