GeoStore Alternate Indexes

Alternate Indexes are a very powerful way to apply additional filters to your searches on properties of a Feature.

Link Using Alternate Indexes Back to Top

Alternate Indexes can be added to an existing GeoStore very easily:

// create an index on the properties.street value
gs.addIndex({
  property: "street",
  index: new BTree()
});

// create an index on the properties.crime value
gs.addIndex({
  property: "crime",
  index: new BTree()
});

Queries against Alternate Indexes are very specific to the index, but the basic syntax of a query is straightforward:

gs.within(
  geojson,
  {
    "name": {
      "equals": "Main"
    },
    "crime": {
      "equals": "Arson"
    }
  },
  function (err, res) {
    // node.js style callback
  }
);

In this example, first every Feature that is within the GeoJSON is found in the Spatial Index, then each of those entries are searched for in the B-Tree indexes. Only those entries that have a properties.street of “Main” and a properties.crime of “Arson” are returned.

Link Indexable Data Back to Top

Only data that is available in properties is indexable. When a Feature is added to the GeoStore, the list of Alternate Indexes is scanned, and any property that is found is added to that Alternate Index.

Alternate Indexes are asyncronous and use Node.js style callbacks.

Link Existing Alternate Indexes Back to Top

Terraformer currently ships with a single alternate index, with more coming soon.

Link Writing an Alternate Index Back to Top

Alternate Indexes rely on two methods to be exposed to the GeoStore to add and remove data. Additional methods can be added for querying and are introspected for searching.

For instance, when a equals query is made against an Alternate Index, if the equals method is on the index, then it is called with all arguments from the contains or within.

Link Index.add(value, id, callback) Back to Top

Add a value to the Alternate Index by id.

Option Value Description
value String or Number The value to add to the index
id String or Number The id of the Feature to be added
callback function Callback to be fired when the add has been completed

Example:

idx.add(value, id, function (err, res) {
  // Node.js style callback
});

Link Index.remove(value, id, callback) Back to Top

Add a value to the Alternate Index by id.

Option Value Description
value String or Number The value to remove from the index
id String or Number The id of the Feature to be removed
callback function Callback to be fired when the remove has been completed

Example:

idx.add(value, id, function (err, res) {
  // Node.js style callback
});