我试图简单地禁用在索引创建时在映射中未明确定义的任何字段的动态映射。没有什么会的工作,所以我甚至试过在他们的文档的例子Elasticsearch 5.x.x无法禁用动态映射
PUT my_index
{
"mappings": {
"my_type": {
"dynamic": false,
"properties": {
"user": {
"type": "text"
}
}
}
}
}
做了一个试验插入:
POST my_index/my_type
{
"user": "tester",
"some_unknown_field": "lsdkfjsd"
}
然后搜索指数显示:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "my_index",
"_type": "my_type",
"_id": "AViPrfwVko8c8Q3co8Qz",
"_score": 1,
"_source": {
"user": "tester",
"some_unknown_field": "lsdkfjsd"
}
}
]
}
}
我期待“ some_unknown_field“不被索引,因为它没有在映射中定义。那么为什么它仍然被索引?我错过了什么吗?
UPDATE
事实证明,这不是目前在5.0.0可以做到我想要的东西,所以我删除我的应用程序中的字段发送给elasticsearch之前,取得相同的最终结果。
是的源过滤确实有效,但这不是我想要做的。我不希望额外的字段甚至可以输入索引,我希望它们完全被忽略。严格也不会工作,因为它拒绝整个文件,而不仅仅是额外的领域。我不认为这是可能做到我想要的当前版本,我想我必须在发送到Elasticsearch之前删除我的应用层中的字段。 –
@deRaad yup似乎是唯一的选择。如何在执行映射之前制作'index_mapper_dynamic:false'。 “settings”:{ “index.mapper.dynamic”:false。我已经更新了答案。 }, – Kulasangar