【问题标题】:Dictionary field with name "Metadata"名称为“元数据”的字典字段
【发布时间】:2021-02-11 07:25:37
【问题描述】:

这个问题源于我的previous post,但我认为它值得单独讨论。

在我的文档模型中,我创建了两个Dictionary<string, object> 类型的字段:

public class Document 
{
    // some fields ....
    public Dictionary<string, object> Permissions { get; set; }
    public Dictionary<string, object> Metadata { get; set; }
}

我正在使用默认索引策略(让弹性句柄映射)。

private static void Main(string[] args)
{
    var settings = new ConnectionSettings(new Uri("http://127.0.0.1:9200"));
    settings.EnableDebugMode();
    settings.DefaultMappingFor<Document>(m => m
        .IndexName("documents")
    );
    var client = new ElasticClient(settings);

    foreach (var doc in SampleDocuments.Documents)
    {
        var result = client.IndexDocument(doc);

        Console.WriteLine($"Indexing {doc.Name}: {result.IsValid}");
    }
}

现在,查看来自 kibana 的文档,我注意到只有 Metadata 字段中的字段是动态映射的。来自Permissions 字段的那些是unknown type

注意左边的图标。进一步调查表明,将Metadata 字段名称更改为其他任何名称(如Metadata1)会禁用自动检测类型(它的索引方式与Permissions 相同)。

我的问题是:这个名字有什么特别之处?第二个问题是:如何强制弹性以与Metadata 相同的方式索引Permissions 字段?我尝试添加[Nested][Object] 映射,还在AutoMap() 中设置最大递归级别,但没有成功。

【问题讨论】:

    标签: c# elasticsearch nest


    【解决方案1】:

    您只需在堆栈管理 > 索引模式 > 刷新中refresh your index pattern 以确保获取最新的映射更改。

    另外值得注意的是,从 7.11.0 开始,refresh button has disappears 作为索引模式现在会在需要时自动刷新。

    【讨论】:

    • 这个运气好吗?
    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 2020-02-06
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多