我正在使用 Redisearch 和 RedisJSON 并且我有这个对象类型
{
"Id": "string",
"Locked": "string"
}
我有这个索引
FT.CREATE idx ON JSON PREFIX 1 "queue:" SCHEMA $.Id AS Id TAG $.Locked AS Locked TAG
我正在尝试查找
Id
不等于 hello-world
并且“锁定”为“假”的对象。
我正在尝试用这个命令来做到这一点
FT.SEARCH idx "-@Id:{hello\\-world} @Locked:{false}"
但是结果完全错误,事实上它会返回每个对象,无论它们的 Id 是否不等于查询中指定的 Id 并且 Locked 是否为 false。 但是我发现通过交换 Id 和 Locked 结果是正确的,这让我认为应用于
Id
的 NOT 运算符会否定整个查询。
我做错了什么还是这是有意的行为?解决方法很好,但是如果我需要使用两个否定查询进行搜索怎么办?
这是
DIALECT 1
的一个已知问题,目前是默认问题。
尝试使用
DIALECT 2
及以上,或者通过命令本身:
FT.SEARCH idx "-@Id:{hello\\-world} @Locked:{false}" DIALECT 2
或者通过设置默认方言(加载模块时,或使用
FT.CONFIG
:
FT.CONFIG SET DEFAUL_DIALECT 2
请参阅文档了解更多信息