对 REDIS 非常陌生,并且在使用 JSON/索引/查询时遇到问题,这让我发疯。
结构示例
public class MyType implements Serializable {
{
@SerializedName("myval")
@Expose
private Integer myval;
@SerializedName("status")
@Expose
private String status;
}
我可以轻松使用 redis-stack,并使用 JSON/GSON 推送此类。
当我尝试查询时出现问题。
我设置了一个看起来像这样的索引
Schema testSchema = new Schema().addTextField("$.status",1.0);
myJedis.ftCreate("STATUSINDEX",IndexOperations().setDefault(rule),testSchema);
然后我插入一些 json blob,一些状态为“on”,另一些状态为“OFF”
使用 redisInsight/Browser,我可以看到我的 json,状态为 ON 和 OFF,如之前设置的那样。
使用redisInsight/RediSearch:
如果我使用搜索
FT.SEARCH“STATUSINDEX”'@&.status:OFF'
我按预期得到了状态为“OFF”的 json 对象。
如果我使用搜索
FT.SEARCH“STATUSINDEX”'@&.status:ON'
我什么也没得到。
如果我重复测试,但在插入对象时用“MYON”代替“ON”,则搜索: FT.SEARCH "STATUSINDEX" '@&.status:MYON' 返回预期的 json 对象。
我一定做错了什么,或者“on”值被保留了??
蒂亚,韦恩
尝试了许多不同的测试和状态类型的组合。似乎只有使用“ON”才会发生
我怀疑原因是您已将“状态”字段定义为索引架构中的文本。文本类型用于自由文本搜索,因此具有“停止词”的概念 - 被忽略的常见词 - 并且“on”可能就在那里。
您应该使用标签字段。