【发布时间】:2015-07-13 13:26:00
【问题描述】:
我开始考虑为推文创建特定的 ES 映射,但很快意识到推文模型的 ES 映射将随着时间的推移而成为一场噩梦,因此我开始考虑动态模板。我已经根据 twitter 对象描述为每个可能的属性注册了一个动态模板。推文是一种非常分层和冗余的格式,这意味着一个属性,比如“created_at”,可能会出现在许多地方——因此维护一个稳定的显式映射是一场噩梦。
到目前为止,在我创建的映射中,我 没有 显式映射(“属性”-属性为空),因为我希望 所有 映射由动态模板。例如,我的“created_at”属性的动态模板如下所示:
{
"created_at": {
"match": "created_at",
"mapping": {
"format": "EEE MMM d HH:mm:ss Z YYYY",
"index": "no"
}
}
我认为拥有这个模板可以处理“created_at”属性的映射,无论它出现在 json 结构中的什么位置。我知道我可以指定“path_match”以明确指定给定的属性实例,但我希望 all 根据上面的模板映射“created_at”属性。
但是 - 当我开始将数据索引到 ES 中时,我会遇到很多错误,如下所示:
Caused by: org.elasticsearch.ElasticsearchIllegalArgumentException: unknown property [created_at]
at org.elasticsearch.index.mapper.core.StringFieldMapper.parseCreateFieldForString(StringFieldMapper.java:331)
at org.elasticsearch.index.mapper.core.StringFieldMapper.parseCreateField(StringFieldMapper.java:277)
at org.elasticsearch.index.mapper.core.AbstractFieldMapper.parse(AbstractFieldMapper.java:399)
... 13 more
我在这里做错了什么?
【问题讨论】:
-
您可以尝试将
"match_mapping_type": "*"添加到created_at模板中看看效果如何?
标签: templates dynamic elasticsearch mapping