我有一个索引,我已将其映射设置为"dynamic":"strict"
.
正如预期的那样,在大多数情况下,如果引入了映射中未列出的字段,Elasticsearch
则会拒绝它。
但是我发现任何具有null
值的字段都没有被捕获,并将其纳入我的索引。这是我的映射的样子:
{
"myindex": {
"mappings": {
"mystuff": {
"dynamic": "strict",
"_id": {
"store": true,
"index": "not_analyzed"
},
"_timestamp": {
"enabled": true,
"store": true
},
"_index": {
"enabled": true
},
"_type": {
"store": true
},
"properties": {
"entitlements": {
"type": "nested",
"properties": {
"accountNumber": {
"type": "string",
"index": "not_analyzed"
},
"active": {
"type": "string",
"index": "not_analyzed"
},
"assetEndDate": {
"type": "date",
"format": "date_time_no_millis"
}
}
}
}
}
}
}
}
编辑(包括示例场景)
使用上面的映射,这是我看到的场景:
1) 发布有效文档(映射后的文档)时,200 OK
.
发布文件:
{
"entitlements": [
{
"accountNumber": "123213",
"active": "true",
"assetEndDate": "2016-10-13T00:00:00Z"
}
]
}
弹性搜索响应:
{
"_index": "myindex",
"_type": "mystuff",
"_id": "5",
"_version": 1,
"created": true
}
2) 发布无效文档(不遵循映射的文档)时,400 StrictDynamicMappingException
.
发布文件:
{
"entitlements": [
{
"accountNumber":"123213",
"XXXXactive": "true",
"assetEndDate": "2016-10-13T00:00:00Z"
}
]
}
弹性搜索响应:
{
"error": "StrictDynamicMappingException[mapping set to strict, dynamic introduction of [Xactive] within [entitlements] is not allowed]",
"status": 400
}
null
3) 当发布带有无效字段值的无效文档(不遵循映射的文档)时, 200 OK
.
发布文件:
{
"entitlements": [
{
"accountNumber":"123213",
"XXXXactive": null,
"assetEndDate": "2016-10-13T00:00:00Z"
}
]
}
弹性搜索响应:
{
"_index": "myindex",
"_type": "mystuff",
"_id": "7",
"_version": 1,
"created": true
}
null
4) 当发布带有无效字段值的无效文档(不遵循映射的文档)时, 200 OK
.
发布文件:
{
"entitlements": [
{
"accountNumber":"123213",
"XXXXactive": null,
"assetEndDate": "2016-10-13T00:00:00Z",
"THIS_SHOULD_NOT_BE_HERE": null
}
]
}
弹性搜索响应:
{
"_index": "myindex",
"_type": "mystuff",
"_id": "9",
"_version": 1,
"created": true
}
我担心的是第 3 和第 4 种情况。
看起来这个问题(或一个非常相似的问题)是在这里Elasticsearch
的git 存储库中提出的,并且已经关闭。但是,该问题似乎仍然是版本 1.7 中的问题。
这在本地以及我使用 AWSElasticsearch
服务部署的索引上都可以看到。
我是在某个地方犯了错误,还是有人找到了解决这个问题的方法?