实际上,Nest可以选择使用此映射配置动态映射(取自NEST源代码)
.DynamicTemplates(d => d
.Add(t => t
.Name("template_1")
.Match("multi*")
.Mapping(tm => tm
.MultiField(mf => mf
.Fields(mff => mff
.Generic(g => g
.Name("{name}")
.Type("{dynamic_type}")
.Index("analyzed")
.Store(false)
我想知道是否有关于使用动态对象或词典的选项,谢谢。
吉安玛丽亚。答案 0 :(得分:0)
请参阅此link以查看Elasticsearch如何管理对象之间的关系。
现在,您的班级中有一个收藏 MyDict 的对象:
public class MyClass
{
public string Id { get; set; }
public DateTime Created { get; set; }
public Dictionary<string, object> MyDict { get; set; }
}
文档的表示,此类的实例,在索引上应如下所示(在我的示例中,我使用MyDict集合来描述用户权限):
{
"_index": "myindex",
"_type": "myclass",
"_id": "deb087c7d351-144b32bd-8534-4412-abbd",
"_version": 1,
"_score": 1,
"_source": {
"id": "deb087c7d351-144b32bd-8534-4412-abbd",
"created ": "2015-07-15T12:42:00",
"mydict": {
"owner": "administrator",
"permission": "777",
"description": "superuser",
},
}
}
现在,如果要定义与MyDict Collection上的字段匹配的DynamicTemplate,可以使用模板定义的PathMatch
选项,这允许将动态模板与“完整”点表示法名称匹配字段(check full documentation)
这是设置为not_analyzed的MyDict Collection中字段的DynamicTemplate示例:
.DynamicTemplates(dt => dt
.Add(t => t
.Name("mydict_notanalyzed")
.PathMatch("mydict.*")
.Mapping(tm => tm
.Generic(g => g.Index("not_analyzed")))
)
)