【问题标题】:Creating an index in Ravendb that makes object array searchable在 Ravendb 中创建使对象数组可搜索的索引
【发布时间】:2020-12-10 14:54:55
【问题描述】:

在 Raven 中,我正在保存 json 文档,我希望创建一个索引,使该 json 中的对象数组可搜索。 下面的 json 结构就是一个例子。

"OrderProperties": [
    {
        "Key": "UserProfileType",
        "Value": "ClubMember"
    },
    {
        "Key": "FirstTimeReferer",
        "Value": "some value"
    }
]

我试图制作一个可以在 raven studio 中使用的索引。首先我尝试做:

from doc in docs.WebOrderModels
select new {
    OrderProperties = doc.OrderProperties
}

这不起作用,所以我尝试了以下方法

from doc in docs.WebOrderModels
select new {
    OrderProperties_Key = doc.OrderProperties.Key,
    OrderProperties_Value = doc.OrderProperties.Value,
}

但是,这仍然使对象未编入索引,因此我无法根据此过滤搜索。 有没有一种方法可以创建一个索引,使 json 中的键、值对可搜索?

【问题讨论】:

标签: ravendb ravendb-studio


【解决方案1】:

我发布这个答案是为了帮助其他人。

我最终创建的索引如下所示:

from doc in docs.WebOrderModels
from prop in doc.OrderProperties
where prop.Key == "ShippingMethodAlias"
select new {
    Value = prop.Value
}

where 语句是为了尽可能减少扇出。

【讨论】:

    【解决方案2】:

    我认为您在索引中关注Dynamic fields,其想法是为字典和嵌套结构生成新的自定义索引术语。

    对于您的示例,生成的索引项(也称为动态字段)将是:

    {
      "OrderProperties_UserProfileType": "ClubMember",
      "OrderProperties_FirstTimeReferer": "some value"
    }
    

    可以访问

    • RQL 中作为from index 'Y' where OrderProperties_UserProfileType = 'ClubMember'(看起来很明显),
    • C# as s.Query<X,Y>().Where(p => p.OrderProperties["UserProfileType"].Equals("ClubMember")) 中(将其用作字典)。

    这是关于该主题的博客文章 - Power of Dynamic fields for indexing dictionaries and collections in RavenDB。它有很多示例,您可以在 GitHub 上的 YABT project 找到更多示例。

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-15
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多