当我调用下面的函数时,我得到了结果输出:
> FT.CREATE Results ON JSON SCHEMA $.a AS masterId TEXT $.b AS value numeric ...
> <Insert Data>
> FT.AGGREGATE Results .* GROUPBY 1 @masterId REDUCE SUM 1 @value AS value LIMIT 0 100
1) (integer) 3
2) 1) "masterId"
2) ""
3) "value"
4) "61.03"
3) 1) "masterId"
2) "1985748"
3) "value"
4) "121.78"
4) 1) "masterId"
2) "1985749"
3) "value"
4) "129.85"
然后,我可以通过特定的masterId
搜索项目列表:
> FT.SEARCH Results @masterId:1985749 LIMIT 0 1000
1) (integer) 154
...
但是我不知道如何搜索“空白”@masterId:""
的结果。搜索双引号、单引号、NULL等都返回语法错误或0结果。是正确的语法在文档在线某处&我只是瞎了眼,是一些奇怪的怪癖周围的“空”键,还是它必须与非标准的转义字符(例如。我试过\"\"
)?
1条答案
按热度按时间whitzsjs1#
我不认为FT.SEARCH会允许这样做,但是,你可以使用FT.AGGREGATE和一个过滤器来做更高级的搜索。
但首先,
masterId
字段应该是TAG而不是TEXT。TEXT用于全文搜索。就像是供人类阅读的文本段落。它做了很多事情来优化这一点,如词干和忽略标点符号和停止词。这可能不是你想要的,所以对于这些例子,我将调用FT.CREATE改为:
无论如何,这里有一个使用FT.AGGREGATE搜索
masterId
的空字符串值的示例:请注意,您需要LOAD任何您希望返回或过滤的字段。
下面是
undefined
:注意,我调用的是
exists()
函数。有一大堆FT.AGGREGATE的函数可以与APPLY一起使用,也可以与FILTER一起使用。此外,您可能希望将尽可能多的查询作为主查询字符串的一部分,因为我相信这样会更有效。例如,假设我们想要缺少
masterId
的文档,并且value
在50和75之间:希望这对你有帮助!