将动态模板与 NEST 和 ElasticSearch 一起使用的 C# 示例
本文关键字:一起 示例 ElasticSearch 动态 NEST | 更新日期: 2023-09-27 18:37:15
实际上 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)
我想知道是否有一些关于动态对象或字典使用的选项,谢谢。
吉安·玛丽亚。
请参考这个链接来检查 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 集合上的字段匹配的 DynamicTemplate,您可以使用模板定义的PathMatch
选项,这允许将动态模板与字段的"完整"点表示法名称匹配(查看完整文档)
以下是 MyDict 集合中设置为not_analyzed字段的动态模板示例:
.DynamicTemplates(dt => dt
.Add(t => t
.Name("mydict_notanalyzed")
.PathMatch("mydict.*")
.Mapping(tm => tm
.Generic(g => g.Index("not_analyzed")))
)
)