Redis OM Spring 不返回 FT.SEARCH 结果,即使它存在

问题描述 投票:0回答:1

我有一个使用 Redis-OM-Spring 创建的数据模型,如下所示:

@Data
@Document
public class RedisOAuth2Authorization implements Serializable {

    @Indexed
    @NonNull
    @Id
    private String id;

    @Indexed
    @Searchable
    private String registeredClientId;

    @Indexed
    @Searchable
    private String authorizationCodeValue;
}

我想通过

authorizationCodeValue
进行搜索,并且我在我的存储库中定义了以下方法。

List<RedisOAuth2Authorization> findByAuthorizationCodeValue(String authorizationCodeValue);

请注意,Redis-OM-Spring 通过方法名称派生查询。当我调用此方法并尝试通过值获取数据(

RedisOAuth2Authorization
JSON)时,它不会返回任何结果。

这是我存储在 Redis 中的数据。 Redis Object

这是调用

findByAuthorizationCodeValue
方法时执行的查询(从探查器观察):

"FT.SEARCH" "com.my.RedisOAuth2AuthorizationIdx" "@authorizationCodeValue:_YYbHPezqAaWg5uy3QpRQZfqz7_286Ssy6\\-t8mHLMerRDPe8MajCW4DESDS2rZg2epRPaVCshFSmcBLVHygstWsOlQnIRRlWhJZH_eOC3rifsx81r0_Sr62YdKMVuVZx" "LIMIT" "0" "10000"
1) "0"

如何解决此问题并通过授权代码值获取 JSON?

spring redis spring-data-redis redis-om-spring
1个回答
0
投票

当您在Redis OM Spring中将某些内容标记为@Searchable时,它会在Redis中索引该字段以进行全文搜索。全文搜索适用于人类可读的文本,而不是精确匹配。它将进行词干提取、删除停用词,以及(在您的情况下最重要的)标点符号。

我的猜测是,此查询中的转义连字符被视为索引中的空格,根本找不到。

我建议删除@Searchable,因为这些数据显然不是人类可读的文本。 @Indexed 是合适的。

值得注意的是,Redis OM Spring 中的 @Searchable 和 @Indexed 注解并不是设计用来一起使用的。我认为最后一个获胜——至少观察到的行为是这样。

© www.soinside.com 2019 - 2024. All rights reserved.