C#示例将DynamicTemplates与NEST和ElasticSearch一起使用

时间:2015-01-13 08:53:25

标签: c# elasticsearch

实际上,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)

我想知道是否有关于使用动态对象或词典的选项,谢谢。

吉安玛丽亚。

1 个答案:

答案 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")))
    )
)