我有一个简单的条目:
json.set a:1 . '{"name":"chloe", "age":26 , "foo" : {"bar" : 1}'在创建索引时,我可以深入到
FT.CREATE ON JSON SCHEMA $.name AS name TEXT ..... 然而,bar是一个动态值,可以更改。如何在foo下为动态值创建索引
发布于 2022-10-17 13:56:30
您可以使用完整的JSONPath语法来匹配JSON中的字段。如果属性foo总是包含一个对象,而该对象总是包含一个和唯一一个属性,则可以使用如下所示的JSONPath $.foo.*:
> FT.CREATE a:index ON JSON SCHEMA $.name AS name TEXT $.foo.* AS num NUMERIC
OK
> FT.SEARCH a:index "@num:[1 1]"
1) (integer) 1
2) "a:1"
3) 1) "$"
2) "{\"name\":\"chloe\",\"age\":26,\"foo\":{\"bar\":1}}"请注意,如果JSONPath包含多个属性,则foo很可能返回多个结果:
{
"name" : "chloe",
"age": 26,
"foo": {
"bar": 1,
"baz": 13
}
}如果您的字段是标记字段,而JSON包含字符串而不是数字,这可能是可取的。但它不适用于数字字段。
发布于 2022-10-18 05:41:18
您可以尝试像JSONPath这样的$.foo.*,它将匹配顶级foo的所有直接子级。
如果有多个子级,那么RediSearch 2.6.1将提供对多个值的支持。
如果子级类型不同,则可以尝试使用筛选器来避免类型不匹配(例如,'$.foo.[?(@.*>-999)]' )处理特定数值的索引失败,或使用'$.foo.[?(@.*!="")]'处理文本值。
https://stackoverflow.com/questions/74027927
复制相似问题