Пропущенная агрегация используется для поиска документов, которые не содержат заданное поле (не значение)
{
"product_id": "p1",
"price":100
}
{
"product_id":"P2"
}
Второй документ не содержит цену поля. Чтобы найти все продукты, у которых нет цены, вы будете использовать отсутствующую агрегацию.
В вашем случае вы хотите агрегировать документы, которые не имеют определенного значения, вам нужно использовать вложенную агрегацию с фильтром субагрегации
Отображения:
PUT index19
{
"mappings": {
"properties": {
"customFields": {
"type": "nested",
"properties": {
"key": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"keywordValue":{
"type":"integer"
}
}
}
}
}
}
Запрос:
GET index19/_search
{
"size": 0,
"aggs": {
"without_firsttype": {
"nested": {
"path": "customFields"
},
"aggs": {
"key_check": {
"filter": {
"bool": {
"must_not": [
{
"term": {
"customFields.key.keyword": {
"value": "firstType"
}
}
}
]
}
},
"aggs": {
"Document": {
"reverse_nested": {}
}
}
}
}
}
}
}
Результат:
"aggregations" : {
"without_firsttype" : {
"doc_count" : 4,
"key_check" : {
"doc_count" : 3,
"Document" : {
"doc_count" : 2
}
}
}
}