按地理空间索引字段

时间:2018-01-10 14:26:31

标签: java spring-boot redis spring-data-redis

基于Spring Data Redis guide,并定义了以下内容:

模型

@RedisHash("positions")
public class Position {

    @Id
    private String id;

    @GeoIndexed
    private Point coordinates;

    //...
}

连接

@Configuration
public class RedisConfig {
    @Bean
    public RedisConnectionFactory lettuceConnectionFactory() {
        return new LettuceConnectionFactory("localhost", 6379);
    }

    @Bean
    public RedisTemplate<String, Position> redisTemplate() {

        final RedisTemplate<String, Position> template = new RedisTemplate<String, Position>();
        template.setConnectionFactory(lettuceConnectionFactory());
        return template;
    }
}

我想通过坐标查询位置,这就是我定义以下存储库的原因:

存储库

public interface PositionRepository extends CrudRepository<Position, String> {
    List<Position> findByCoordinates(Point point);
    //...
}

但调用该方法会产生org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.springframework.data.geo.Point] to type [byte[]]

如何定义/实施该查询?

1 个答案:

答案 0 :(得分:0)

TL; DR;

您需要使用Near关键字来表明它是地理查询。

说明

Spring Data从查询方法派生要匹配的属性及其实际匹配模式。有几种匹配模式,默认是精确(简单属性)匹配,方法是将条件与存储值进行比较。

将您的代码更改为

public interface PositionRepository extends CrudRepository<Position, String> {
    List<Position> findByCoordinatesNear(Point point);
}

执行地理查询。

当您从存储库角度指定查询方法时,如何对对象进行注释并不是真正相关。

另见: