mirror of
https://github.com/redis/go-redis.git
synced 2025-04-16 09:23:06 +03:00
* chore: extract benchmark tests * wip * enable pubsub tests * enable ring tests * stop tests with build redis from source * start all tests * mix of makefile and action * add sentinel configs * fix example test * stop debug on re * wip * enable gears for redis 7.2 * wip * enable sentinel, they are expected to fail * fix: linter configuration * chore: update re versions * return older redis enterprise version * add basic codeql * wip: increase timeout, focus only sentinel tests * sentinels with docker network host * enable all tests * fix flanky test * enable example tests * tidy docker compose * add debug output * stop shutingdown masters * don't test sentinel for re * skip unsuported addscores * Update README bump go version in CI * Update README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update CONTRIBUTING.md add information about new test setup --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
210 lines
4.2 KiB
Go
210 lines
4.2 KiB
Go
// 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
|
|
// make sure we are working with fresh database
|
|
rdb.FlushDB(ctx)
|
|
rdb.FTDropIndex(ctx, "productidx")
|
|
rdb.FTDropIndex(ctx, "geomidx")
|
|
rdb.Del(ctx, "product:46885", "product:46886", "shape:1", "shape:2", "shape:3", "shape:4")
|
|
// 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"}]]}]}
|
|
}
|