将动态模板与 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)

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

吉安·玛丽亚。

将动态模板与 NEST 和 ElasticSearch 一起使用的 C# 示例

请参考这个链接来检查 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")))
    )
)