0

我有一个索引,我已将其映射设置为"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
}

null3) 当发布带有无效字段值的无效文档(不遵循映射的文档)时, 200 OK.

发布文件:

{
  "entitlements": [
    {
      "accountNumber":"123213",
      "XXXXactive": null,
      "assetEndDate": "2016-10-13T00:00:00Z"
    }     
  ] 
}

弹性搜索响应:

{
  "_index": "myindex",
  "_type": "mystuff",
  "_id": "7",
  "_version": 1,
  "created": true
}

null4) 当发布带有无效字段值的无效文档(不遵循映射的文档)时, 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服务部署的索引上都可以看到。

我是在某个地方犯了错误,还是有人找到了解决这个问题的方法?

4

0 回答 0