Как задать дополнительные аргументы команды geo radius в репозиториях Spring Data Redis? - PullRequest
1 голос
/ 08 апреля 2020

Я использую Spring Data Redis для сохранения некоторых адресов , каждый из которых содержит свойство location типа Point, которое содержит географические координаты конкретного адреса. Кроме того, свойство помечено @GeoIndexed. Как описано здесь: Геопространственный индекс .

Моя Address модель выглядит следующим образом:

@RedisHash("addresses")
public class Address {    
    @Id
    private String id;    

    @GeoIndexed
    private Point location;    
}

Мне удалось получить все близлежащие адреса в данной точке и расстояние с этим запросом к репозиторию:

public interface AddressRepository extends CrudRepository<Address, String> {
    List<Address> findByLocationNear(Point location, Distance distance);
}

Моя проблема в том, что возвращенные адреса по вышеуказанному запросу не отсортированы, но мне нужно, чтобы они были отсортированы от ближайшего к дальнему (* Опция 1019 *, описанная здесь: GEORADIUS - Команда Redis ).

Поэтому, как правило, мне нужен способ передать дополнительные аргументы этому запросу, такие как сортировка или ограничение результатов (любая опция GEORADIUS - Redis Command ).

Может кто-нибудь помочь, пожалуйста?

1 Ответ

1 голос
/ 17 апреля 2020

Вы можете обойти эту проблему, реализуя свое решение, используя класс GeoOperations.

Таким образом, вы можете использовать RedisGeoCommands.GeoRadiusCommandArgs.limit(n), и вы сможете ограничить число результатов первым n соответствия.

Посмотрите здесь официальную документацию Spring Data Redis:

https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/connection/RedisGeoCommands.GeoRadiusCommandArgs.html

Вы также можете найти некоторые примеры непосредственно в тесты Spring Data Redis.

...