【发布时间】: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