Строгое сопоставление Elasticsearch не работает для полей с нулевыми значениями

У меня есть индекс, для которого я установил отображение на "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
}

3) При публикации недопустимого документа (не соответствующего сопоставлению) со значением null для недопустимого поля 200 OK.

размещенный документ:

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

Ответ эластичного поиска:

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

4) При публикации недопустимого документа (не соответствующего сопоставлению) со значением null для недопустимого поля 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.

Это видно локально, а также в индексах, которые я развернул с помощью AWS Elasticsearch Service.

Я где-то ошибаюсь, или кто-нибудь нашел решение этой проблемы?


person bkahler    schedule 21.10.2015    source источник
comment
Протестировано с 1.7.2. Я не вижу проблемы. Или вы не правильно описываете проблему. Я вижу сопоставление, но не вижу неудачного теста в вашем сообщении.   -  person Andrei Stefan    schedule 22.10.2015
comment
То же самое здесь, проверено с 1.7.1 и 1.7.3 и нет проблем.   -  person Val    schedule 22.10.2015