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
Обслуживание.
Я где-то ошибаюсь, или кто-нибудь нашел решение этой проблемы?