将 DynamicTemplates 与 NEST 和 ElasticSearch 结合使用的 C# 示例

C# Sample to use DynamicTemplates with NEST and 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)

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

吉安玛丽亚。

请参阅此link以了解 Elasticsearch 如何管理对象之间的关系。

现在假设您在 Class:

中有对象的集合 MyDict
public class MyClass
{   
    public string Id { get; set; }
    public DateTime Created { get; set; }
    public Dictionary<string, object> MyDict { get; set; }
}

文档的表示,此 class 的实例,在索引上应如下所示(在我的示例中,我使用 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",
            },
        }
}

现在,如果您想定义一个 DynamicTemplate 来匹配您在 MyDict Collection 上的字段,您可以使用模板定义的 PathMatch 选项,这允许将动态模板与 "full" 字段的点符号名称 (check full documentation)

这是 MyDict 集合中字段的 DynamicTemplate 示例设置为 not_analyzed:

.DynamicTemplates(dt => dt
        .Add(t => t
            .Name("mydict_notanalyzed")
            .PathMatch("mydict.*")
            .Mapping(tm => tm
                .Generic(g => g.Index("not_analyzed")))
    )
)