我有一个名为“GrossSalaryElements”的字段,它是字符串和小数的字典。
当使用 Nest.Object 和自动映射为弹性创建索引时,它会为每个键创建一个属性,显然我不希望这样。我在网上读到我应该使用嵌套数据属性,但这需要在创建索引时手动设置。但是我似乎仍然遇到同样的问题,这是我当前的代码,我做得正确吗?:
ElasticClient.Indices.Create(indexNameWithTenantId,
c => c.InitializeUsing(new IndexState { Settings = new IndexSettings() }).Map<MainTermsDataModel>(
m=>m.AutoMap()
.Properties(p=>p
.Nested<IDictionary<string, decimal>>(x=>x
.Name(x=>x.GrossSalaryElements)
.Properties(pp=>pp
.Number(nn=>nn
.Name(x=>x.Values)
.Type(NumberType.Double)
)
.Keyword(k=>k
.Name(x=>x.Keys)
)
)
)
)
)
);
在这个问题上花了几周时间后,我找到了解决方案和一些提示。
foreach(var x in dictFields)
{
p = p.Object<IDictionary<string, decimal>>(Q => Q
.Name(char.ToLower(x[0]) + x.Substring(1))
.Properties(pp => pp
.Number(nn => nn
.Name("values")
.Type(NumberType.Double)
)
.Keyword(k => k
.Name("key")
)
).Dynamic(false)
);
}