如何使用NEST将ElasticSearch索引配置为默认使用嵌套类型

时间:2015-02-24 11:47:57

标签: c# json elasticsearch json.net nest

我使用Elasticsearch来索引复杂的层次结构对象,这些对象派生自一个非常复杂的对象模型(多个继承层次结构中超过1000个对象)。然而。所有对象都是从一个基类派生的。

要索引的对象。使用C#中的字典和JSON.NET中的JsonExtensionData属性动态构建,用于将字典序列化为JSON,因为我事先并不知道正在索引的对象的结构,因为它是从第三方系统派生的。

我需要确保默认情况下使用嵌套类型对对象编制索引,而不管对象的实际结构或类型如何。

我在StackOverflow上找到了一些相关信息,建议可以使用动态模板完成,但我找不到如何做到的具体示例。

到目前为止,我已尝试使用流畅的界面定义地图,如此

client.Map<Entity>(m => m
        .MapFromAttributes()
        .DynamicTemplates(d => d
            .Add(t => t
                .Name("nested")
                .Mapping(map => map.NestedObject<Entity>(s => s.MapFromAttributes().IncludeInParent(true))))));

我正在按如下方式索引对象

var response = client.Index<Entity>(entity, i => i.Index(index).Type(subType));

其中Entity是所有对象所基于的基类,subType是被索引的根对象的真实基础类型的字符串表示。

但是当我检索映射时,子对象映射仍然全部标识为ObjectMapping而不是NestedObjectMapping。

对任何建议都会感激不尽。

0 个答案:

没有答案