我动态地将对象添加到索引中,因此它们都使用 _default_ 映射进行索引。这是有问题的,因为它会导致诸如Guid
被映射为text
字段而不是作为keyword
. The AutoMap https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/auto-map.htmlNEST 客户端提供的函数可以从任何给定的数据类型“自动推断出正确的”字段,但只有在显式调用时才会这样做。有没有办法强制 _default_ 映射使用与 AutoMap 函数相同的模板?或者我是否需要添加一些额外的代码来循环遍历所有可能的对象类型并创建一个IndexDescriptor
为每一个先发制人?
你可以定义一个索引模板 https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html将映射应用到新创建的模板
var putIndexTemplateResponse = client.PutIndexTemplate("default", t => t
.Template("*")
.Mappings(m => m
.Map("_default_", tm => tm
.Properties(p => p
.Keyword(k => k
.Name("id")
)
)
)
)
);
这将映射id
任何新创建的索引中任何类型的属性作为关键字字段。
如果您需要更多基于约定的东西,您可以使用动态模板 https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-templates.html使用规则来确定应如何映射动态添加的字段
var createIndexResponse = client.CreateIndex("index-name", t => t
.Mappings(m => m
.Map("_default_", tm => tm
.DynamicTemplates(d => d
.DynamicTemplate("default", dt => dt
.Match("id")
.MatchMappingType("string")
.Mapping(mm => mm
.Keyword(k => k)
)
)
)
)
)
);
两种方法都在 Elasticsearch 中设置映射约定。如果您打算确定自己的代码中的任何约定,例如使用访问者模式 https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/visitor-pattern-mapping.html,您需要明确告知 Elasticsearch 结果映射。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)