首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将单个.NET类型映射到ElasticSearch/NEST中的多个嵌套对象类型?

如何将单个.NET类型映射到ElasticSearch/NEST中的多个嵌套对象类型?
EN

Stack Overflow用户
提问于 2015-04-18 00:56:06
回答 1查看 2.4K关注 0票数 16

我正在使用NEST库与ElasticSearch进行交互,并且正在尝试找出一种基于非类型数据构建索引类型/嵌套对象的方法。该类型具有以下基本结构。

代码语言:javascript
复制
 public class Entity : DynamicObject
 {
        public string Id { get; set; }
        // a bunch of other simple properties

        public override IEnumerable<string> GetDynamicMemberNames()
        {
                return Data.Select(x => x.Name);
        }

        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {

            var dictionary = Data.First(x => x.Name == binder.Name);
            result = dictionary;
            return true;
        }

        // each instance of one these should be a nested object type
        public IList<NestedType> Data { get; set; } 

        public class NestedType
        {
            // How do I make Name be the nest type name?
            public string Name { get; set; }
            public IDictionary<string, string> Values { get; set; } 
        }
}

我想为每个NestedType实例创建一个嵌套对象/类型。因此,如果有两个NestedType实例,那么就会有两个嵌套对象。我可以从DynamicObject继承NestedType,将字典转换为“真正的”属性,正确地嵌套然后映射(即,将每个字典键转换为属性)。问题是我不知道如何设置嵌套对象的名称/类型。

据我所知,有两种方法可以映射名称: ElasticType属性和NestedObject fluent接口。这里的问题是,存在表示多个嵌套对象类型的单个类型。我可以做一些运行时类型构建,但如果我可以避免的话,我宁愿不做。

有没有办法将方法或属性用作嵌套对象的名称/类型?或者,有没有更好的方法将这种类型的数据映射到ElasticSearch (希望通过NEST)?

谢谢!埃里克

编辑

我更新了实体定义以反映我正在做的事情(使用DynamicObject让JsonSerializer执行我想做的事情)。我想要的是能够让不同的字典有不同的映射,(不同的词干,分析器等)。如果有合适的类型,我可以使用流畅的嵌套语法来设置它,但是当使用动态时,没有类型可供流畅API使用。最终,我希望将fluent API与基于字符串而不是类型的字符串混合在一起。这有意义吗?

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

https://stackoverflow.com/questions/29705215

复制
相关文章

相似问题

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