我有一个使用 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)时,它不会返回任何结果。
这是调用
findByAuthorizationCodeValue
方法时执行的查询(从探查器观察):
"FT.SEARCH" "com.my.RedisOAuth2AuthorizationIdx" "@authorizationCodeValue:_YYbHPezqAaWg5uy3QpRQZfqz7_286Ssy6\\-t8mHLMerRDPe8MajCW4DESDS2rZg2epRPaVCshFSmcBLVHygstWsOlQnIRRlWhJZH_eOC3rifsx81r0_Sr62YdKMVuVZx" "LIMIT" "0" "10000"
1) "0"
如何解决此问题并通过授权代码值获取 JSON?
当您在Redis OM Spring中将某些内容标记为@Searchable时,它会在Redis中索引该字段以进行全文搜索。全文搜索适用于人类可读的文本,而不是精确匹配。它将进行词干提取、删除停用词,以及(在您的情况下最重要的)标点符号。
我的猜测是,此查询中的转义连字符被视为索引中的空格,根本找不到。
我建议删除@Searchable,因为这些数据显然不是人类可读的文本。 @Indexed 是合适的。
值得注意的是,Redis OM Spring 中的 @Searchable 和 @Indexed 注解并不是设计用来一起使用的。我认为最后一个获胜——至少观察到的行为是这样。