Redisearch NOT 运算符否定完整查询

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

我正在使用 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 运算符会否定整个查询。

我做错了什么还是这是有意的行为?解决方法很好,但是如果我需要使用两个否定查询进行搜索怎么办?

redis redisearch redisjson
1个回答
0
投票

这是

DIALECT 1
的一个已知问题,目前是默认问题。

尝试使用

DIALECT 2
及以上,或者通过命令本身:

FT.SEARCH idx "-@Id:{hello\\-world} @Locked:{false}" DIALECT 2

或者通过设置默认方言(加载模块时,或使用

FT.CONFIG
:

FT.CONFIG SET DEFAUL_DIALECT 2

请参阅文档了解更多信息

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