Операции с геопространственными индексами
В Managed Valkey все управление геопространственными индексами выполняется командами Valkey. С полным списком команд Valkey вы можете ознакомиться в официальной документации Valkey.
Обратите внимание, что в Managed Valkey некоторые команды Valkey недоступны.
Получить координаты объектов
Заголовок раздела «Получить координаты объектов»Чтобы получить координаты объектов, используйте команду GEOPOS.
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Узнайте имя ключа с помощью итеративного обхода.
Проверьте тип значения ключа. Для существующего ключа должно вернуться значение
zset.Узнайте имена объектов.
Выполните команду:
text GEOPOS <имя ключа> <объект 1> [<объект 2> ...]Команда вернет список координат в порядке перечисления объектов. Для каждого объекта сначала вернется долгота, затем широта. Для отсутствующего объекта вернется
nil. Если ключ не существует,nilвернется для каждого запрошенного объекта.Координаты могут минимально отличаться от переданных при добавлении из-за точности внутреннего представления. Данные индекса сохранятся.
Получить расстояние между объектами
Заголовок раздела «Получить расстояние между объектами»Чтобы получить расстояние между двумя объектами, используйте команду GEODIST.
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Узнайте имя ключа с помощью итеративного обхода.
Проверьте тип значения ключа. Для существующего ключа должно вернуться значение
zset.Узнайте имена объектов.
Выполните команду:
text GEODIST <имя ключа> <объект 1> <объект 2> [m | km | ft | mi]В команде единица измерения —
mдля метров,kmдля километров,ftдля футов илиmiдля миль. По умолчанию будут использованы метры.Команда вернет расстояние в выбранных единицах. Если хотя бы один объект или ключ не существует, вернется
nil.Расстояние будет вычислено по координатам в приближении сферической Земли. Оно не будет длиной автомобильного или пешеходного маршрута.
Получить геохеши объектов
Заголовок раздела «Получить геохеши объектов»Чтобы получить строковые геохеши объектов, используйте команду GEOHASH.
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Узнайте имя ключа с помощью итеративного обхода.
Проверьте тип значения ключа. Для существующего ключа должно вернуться значение
zset.Узнайте имена объектов.
Выполните команду:
text GEOHASH <имя ключа> <объект 1> [<объект 2> ...]Команда вернет список строк Geohash длиной 11 символов в порядке перечисления объектов. Строка будет представлять местоположение соответствующего объекта. Для отсутствующего объекта вернется
nil. Если ключ не существует,nilвернется для каждого запрошенного объекта.Результат будет строковым геохешем, а не числовым весом участника сортированного множества. Данные индекса сохранятся.
Найти объекты по местоположению
Заголовок раздела «Найти объекты по местоположению»Чтобы найти объекты внутри заданной области, используйте команду GEOSEARCH.
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Узнайте имя ключа с помощью итеративного обхода.
Проверьте тип значения ключа. Для существующего ключа должно вернуться значение
zset.Узнайте имя объекта.
Выполните нужную команду:
- В радиусе
- В прямоугольнике
- В многоугольнике
text GEOSEARCH <имя ключа> FROMLONLAT <долгота> <широта> BYRADIUS <радиус> <единица> [ASC | DESC] [COUNT <количество> [ANY]] [WITHCOORD] [WITHDIST]Вместо
FROMLONLAT <долгота> <широта>можно указатьFROMMEMBER <объект>.В командах:
<единица>—m,km,ftилиmiдля метров, километров, футов или миль.ASCиDESC— порядок от ближайших и от дальних объектов.COUNT— положительное ограничение количества результатов.ANYускорит поиск, но ближайшие объекты не будут гарантированы.WITHCOORD— добавить координаты.WITHDIST— добавить расстояния до центра.<долгота>— число от-180до180градусов.<широта>— число от-85.05112878до85.05112878градусов.<объект>— уникальное имя объекта внутри индекса.
Указывайте долготу перед широтой, отделяйте дробную часть точкой.
Команда вернет найденные объекты. Без дополнительных полей в ответе будут только имена. Если совпадений нет, вернется пустой список. Для получения ближайших объектов задайте
ASC COUNT <количество>безANY. Поиск по координатам при отсутствующем ключе вернет пустой список. Если объект дляFROMMEMBERне найден, вернется ошибка. Данные индекса сохранятся.
Добавить объекты или изменить координаты
Заголовок раздела «Добавить объекты или изменить координаты»Чтобы добавить объекты в геопространственный индекс или изменить их координаты, используйте команду GEOADD.
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Проверьте тип значения ключа. Для существующего ключа должно вернуться значение
zset.Узнайте имена объектов.
Выполните команду:
text GEOADD <имя ключа> [NX | XX] [CH] <долгота 1> <широта 1> <объект 1> [<долгота 2> <широта 2> <объект 2> ...]В команде:
<долгота>— число от-180до180градусов.<широта>— число от-85.05112878до85.05112878градусов.<объект>— уникальное имя объекта внутри индекса.NX— добавлять только новые объекты, не изменяя существующие.XX— изменять только существующие объекты.CH— включить в ответ не только добавленные объекты, но и объекты с измененным сохраненным местоположением.
Указывайте долготу перед широтой, отделяйте дробную часть точкой.
NXиXXвзаимоисключающие.Команда добавит объекты или обновит их координаты. Если ключ не существует, будет создан индекс, кроме случая с
XX. По умолчанию вернется количество добавленных объектов; сCH— суммарное количество добавленных и измененных. Если изменений не произойдет, вернется0. Координаты вне допустимых диапазонов приведут к ошибке.
Сохранить результат геопространственного поиска
Заголовок раздела «Сохранить результат геопространственного поиска»Чтобы сохранить найденные объекты в отдельный ключ, используйте команду GEOSEARCHSTORE.
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Для работы с существующими ключами узнайте их имена с помощью итеративного обхода.
Выберите отдельное имя целевого ключа. Проверьте, существует ли он. Прежнее значение будет заменено результатом.
Проверьте тип значения ключа. Для существующего ключа должно вернуться значение
zset.Задайте область поиска по инструкции GEOSEARCH. Ниже показан поиск в радиусе от заданных координат.
Выполните нужную команду:
- Сохранить координаты
- Сохранить расстояния
text GEOSEARCHSTORE <имя целевого ключа> <имя исходного ключа> FROMLONLAT <долгота> <широта> BYRADIUS <радиус> <единица> [ASC | DESC] [COUNT <количество> [ANY]]Будет сохранен геопространственный индекс найденных объектов. Их координаты можно будет прочитать.
В командах:
<единица>—m,km,ftилиmiдля метров, километров, футов или миль.ASCиDESC— порядок от ближайших и от дальних объектов.COUNT— положительное ограничение количества результатов.ANYускорит поиск, но ближайшие объекты не будут гарантированы.STOREDIST— сохранить расстояние.<долгота>— число от-180до180градусов.<широта>— число от-85.05112878до85.05112878градусов.<объект>— уникальное имя объекта внутри индекса.
Указывайте долготу перед широтой, отделяйте дробную часть точкой.
Можно использовать
FROMMEMBER,BYBOXилиBYPOLYGONпо тем же правилам, что и в GEOSEARCH. Параметры выводаWITHCOORD,WITHDISTиWITHHASHздесь не применяются.Команда вернет количество сохраненных объектов. Существующий целевой ключ будет перезаписан независимо от типа значения. Если результат пуст, целевой ключ будет удален. При разных именах исходный индекс сохранится.