redis-py icon indicating copy to clipboard operation
redis-py copied to clipboard

Add support for GEOSHAPE index fields and WITHIN and CONTAINS query operators

Open uglide opened this issue 2 years ago • 2 comments

Since RediSearch 2.8, it's possible to do more advanced GEO querying with GEOSHAPE fields.

On the client side, we should provide support for Index creation and Querying. APIs should allow users to use popular WKT libraries that parse and "serialise" to WKT format (e.g. https://github.com/cschwarz/wkx)

Consider the following type-script pseudo-code:

// Geometry primitives will be used from third-party libraries and serialized to WKT
let p = new wkx.Polygon([new wkx.Point(1, 2), new wkx.Point(3, 4), new wkx.Point(5, 6), new wkx.Point(1, 2)]);

await client.hSet('land:123', {
    geometry: p.toWkt(), // Serialisation
    price: 29000
})

await client.ft.create('idx:land', {
    'geometry': {
        type: SchemaFieldTypes.GEOSHAPE // New field type
        COORD_SYSTEM: GeoshapeFieldCoordSystem.FLAT // Coordinate system type 
    },
    'price': {
        type: SchemaFieldTypes.NUMERIC,
    }
}, {
    ON: 'HASH',
    PREFIX: 'land:'
});

let areaOfInterest = new wkx.Polygon([new wkx.Point(1, 2), new wkx.Point(3, 4), new wkx.Point(5, 6), new wkx.Point(1, 2)]);

let result = await client.ft.search(
    'idx:land',
    '@geometry:[WITHIN $area] @price:[20000 30000]',
    {
        PARAMS: {
            area: areaOfInterest.toWkt()
        }
    }
);

Requirements:

  • Add support for GEOSHAPE fields:
    • Perform validations to allow passing only POLYGON and POINT geometry primitives.
    • Support specifying the coordinate system
  • Ensure that querying API is compatible with GEOSHAPE queries

Reference documentation: https://redis.io/commands/ft.create/ https://redis.io/commands/ft.search/

uglide avatar Sep 18 '23 13:09 uglide

PR: https://github.com/redis/redis-py/pull/2957

uglide avatar Oct 05 '23 12:10 uglide

This issue is marked stale. It will be closed in 30 days if it is not updated.

github-actions[bot] avatar Jun 22 '25 00:06 github-actions[bot]