首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Redisearch ft.create拥有动态值?

如何使用Redisearch ft.create拥有动态值?
EN

Stack Overflow用户
提问于 2022-10-11 12:10:27
回答 2查看 46关注 0票数 0

我有一个简单的条目:

代码语言:javascript
复制
json.set a:1 . '{"name":"chloe", "age":26 , "foo" : {"bar" : 1}'

在创建索引时,我可以深入到

代码语言:javascript
复制
FT.CREATE ON JSON SCHEMA $.name AS name TEXT ..... 

然而,bar是一个动态值,可以更改。如何在foo下为动态值创建索引

EN

回答 2

Stack Overflow用户

发布于 2022-10-17 13:56:30

您可以使用完整的JSONPath语法来匹配JSON中的字段。如果属性foo总是包含一个对象,而该对象总是包含一个和唯一一个属性,则可以使用如下所示的JSONPath $.foo.*

代码语言:javascript
复制
> 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很可能返回多个结果:

代码语言:javascript
复制
{
  "name" : "chloe",
  "age": 26,
  "foo": {
    "bar": 1,
    "baz": 13
  }
}

如果您的字段是标记字段,而JSON包含字符串而不是数字,这可能是可取的。但它不适用于数字字段。

票数 0
EN

Stack Overflow用户

发布于 2022-10-18 05:41:18

您可以尝试像JSONPath这样的$.foo.*,它将匹配顶级foo的所有直接子级。

如果有多个子级,那么RediSearch 2.6.1将提供对多个值的支持。

如果子级类型不同,则可以尝试使用筛选器来避免类型不匹配(例如,'$.foo.[?(@.*>-999)]' )处理特定数值的索引失败,或使用'$.foo.[?(@.*!="")]'处理文本值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74027927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档