我正在使用NEST库与ElasticSearch进行交互,并且正在尝试找出一种基于非类型数据构建索引类型/嵌套对象的方法。该类型具有以下基本结构。
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与基于字符串而不是类型的字符串混合在一起。这有意义吗?
https://stackoverflow.com/questions/29705215
复制相似问题