我使用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。
对任何建议都会感激不尽。