Skip to content

Commit

Permalink
DOC-4734 added geo indexing examples
Browse files Browse the repository at this point in the history
  • Loading branch information
andy-stark-redis committed Jan 17, 2025
1 parent 0e3ea5f commit d3800c4
Showing 1 changed file with 205 additions and 0 deletions.
205 changes: 205 additions & 0 deletions doctests/geo_index_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
// EXAMPLE: geoindex
// HIDE_START
package example_commands_test

import (
"context"
"fmt"

"github.com/redis/go-redis/v9"
)

// HIDE_END

func ExampleClient_geoindex() {
ctx := context.Background()

rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
Protocol: 2,
})
// REMOVE_START
rdb.FTDropIndex(ctx, "productidx")
rdb.FTDropIndex(ctx, "geomidx")
// REMOVE_END

// STEP_START create_geo_idx
geoCreateResult, err := rdb.FTCreate(ctx,
"productidx",
&redis.FTCreateOptions{
OnJSON: true,
Prefix: []interface{}{"product:"},
},
&redis.FieldSchema{
FieldName: "$.location",
As: "location",
FieldType: redis.SearchFieldTypeGeo,
},
).Result()

if err != nil {
panic(err)
}

fmt.Println(geoCreateResult) // >>> OK
// STEP_END

// STEP_START add_geo_json
prd46885 := map[string]interface{}{
"description": "Navy Blue Slippers",
"price": 45.99,
"city": "Denver",
"location": "-104.991531, 39.742043",
}

gjResult1, err := rdb.JSONSet(ctx, "product:46885", "$", prd46885).Result()

if err != nil {
panic(err)
}

fmt.Println(gjResult1) // >>> OK

prd46886 := map[string]interface{}{
"description": "Bright Green Socks",
"price": 25.50,
"city": "Fort Collins",
"location": "-105.0618814,40.5150098",
}

gjResult2, err := rdb.JSONSet(ctx, "product:46886", "$", prd46886).Result()

if err != nil {
panic(err)
}

fmt.Println(gjResult2) // >>> OK
// STEP_END

// STEP_START geo_query
geoQueryResult, err := rdb.FTSearch(ctx, "productidx",
"@location:[-104.800644 38.846127 100 mi]",
).Result()

if err != nil {
panic(err)
}

fmt.Println(geoQueryResult)
// >>> {1 [{product:46885...
// STEP_END

// STEP_START create_gshape_idx
geomCreateResult, err := rdb.FTCreate(ctx, "geomidx",
&redis.FTCreateOptions{
OnJSON: true,
Prefix: []interface{}{"shape:"},
},
&redis.FieldSchema{
FieldName: "$.name",
As: "name",
FieldType: redis.SearchFieldTypeText,
},
&redis.FieldSchema{
FieldName: "$.geom",
As: "geom",
FieldType: redis.SearchFieldTypeGeoShape,
GeoShapeFieldType: "FLAT",
},
).Result()

if err != nil {
panic(err)
}

fmt.Println(geomCreateResult) // >>> OK
// STEP_END

// STEP_START add_gshape_json
shape1 := map[string]interface{}{
"name": "Green Square",
"geom": "POLYGON ((1 1, 1 3, 3 3, 3 1, 1 1))",
}

gmjResult1, err := rdb.JSONSet(ctx, "shape:1", "$", shape1).Result()

if err != nil {
panic(err)
}

fmt.Println(gmjResult1) // >>> OK

shape2 := map[string]interface{}{
"name": "Red Rectangle",
"geom": "POLYGON ((2 2.5, 2 3.5, 3.5 3.5, 3.5 2.5, 2 2.5))",
}

gmjResult2, err := rdb.JSONSet(ctx, "shape:2", "$", shape2).Result()

if err != nil {
panic(err)
}

fmt.Println(gmjResult2) // >>> OK

shape3 := map[string]interface{}{
"name": "Blue Triangle",
"geom": "POLYGON ((3.5 1, 3.75 2, 4 1, 3.5 1))",
}

gmjResult3, err := rdb.JSONSet(ctx, "shape:3", "$", shape3).Result()

if err != nil {
panic(err)
}

fmt.Println(gmjResult3) // >>> OK

shape4 := map[string]interface{}{
"name": "Purple Point",
"geom": "POINT (2 2)",
}

gmjResult4, err := rdb.JSONSet(ctx, "shape:4", "$", shape4).Result()

if err != nil {
panic(err)
}

fmt.Println(gmjResult4) // >>> OK
// STEP_END

// STEP_START gshape_query
geomQueryResult, err := rdb.FTSearchWithArgs(ctx, "geomidx",
"(-@name:(Green Square) @geom:[WITHIN $qshape])",
&redis.FTSearchOptions{
Params: map[string]interface{}{
"qshape": "POLYGON ((1 1, 1 3, 3 3, 3 1, 1 1))",
},
DialectVersion: 4,
Limit: 1,
},
).Result()

if err != nil {
panic(err)
}

fmt.Println(geomQueryResult)
// >>> {1 [{shape:4...
// STEP_END

// Output:
// OK
// OK
// OK
// {1 [{product:46885 <nil> <nil> <nil> map[$:{"city":"Denver","description":"Navy Blue Slippers","location":"-104.991531, 39.742043","price":45.99}]}]}
// OK
// OK
// OK
// OK
// OK
// {1 [{shape:4 <nil> <nil> <nil> map[$:[{"geom":"POINT (2 2)","name":"Purple Point"}]]}]}
}

0 comments on commit d3800c4

Please sign in to comment.