RediSearch 是否可以在 LOAD 时使用通配符获取多个 JSON 值?

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

对于具有如下形状的 JSON 类型对象

# myPrefix:myKey
{
  "inventory": [
    {
      "name": "Carrot",
      "desc": "A fresh vegetable"
    },
    {
      "name": "Knife",
      "desc": "A tool to cut things"
    }
  ]
}

可以使用 JsonPath 通配符获取

name
中的所有
inventory
,如下所示:
JSON.GET myPrefix:myKey $.inventory[*].name
(或
$.inventory..name
),这将返回
"[\"Carrot\",\"Knife\"]"

但是,当尝试使用 RediSearch 使用

LOAD
聚合此类数据时,似乎只返回第一个值。例如,创建类似
FT.CREATE mySearch ON JSON PREFIX 1 myPrefix: SCHEMA $.inventory[*].name as itemName TEXT
的搜索后,尝试与
FT.AGGREGATE mySearch * LOAD 2 @__key @itemName groupby 1 @__key reduce tolist 1 @itemName as itemsList
聚合将返回:

1) "1"
2) 1) "__key"
   2) "myPrefix:myKey"
   3) "itemsList"
   4) 1) "Carrot"

忽略除“胡萝卜”之外的所有其他

itemName

是否可以使用 FT.AGGREGATE 命令以这种方式查询嵌套的 Json 数据,如果可以,如何查询?

json database redis aggregate full-text-search
1个回答
0
投票

根据 FT.SEARCH 文档,可以使用 DIALECT 设置返回多个值:https://redis.io/commands/ft.search/#return-multiple-values

因此像

FT.AGGREGATE mySearch * LOAD 2 @__key @itemName GROUPBY 1 @__key REDUCE TOLIST 1 @itemName AS itemsList DIALECT 3
这样的聚合会正确返回:

1) "1"
2) 1) "__key"
   2) "myPrefix:myKey"
   3) "itemsList"
   4) 1) "[\"Carrot\",\"Knife\"]"
© www.soinside.com 2019 - 2024. All rights reserved.