Да, что-то подобное возможно. здесь ищет мое решение с использованием вложенных полей.Он позволяет выполнять все операции над «динамическими» полями, но с несколько большими усилиями (с вложенными полями сложнее манипулировать).Суть есть некоторые доказательства для поиска, но я также реализовал агрегации.
curl -XPOST localhost:9200/something -d '{
"mappings" : {
"live" : {
"_source" : { "enabled" : true },
"dynamic" : false,
"properties" : {
"customFields" : {
"type" : "nested",
"properties" : {
"fieldName" : { "type" : "string", "index" : "not_analyzed" },
"stringValue": {
"type" : "string",
"fields" : {
"raw" : { "type" : "string", "index" : "not_analyzed" }
}
},
"integerValue": { "type" : "long" },
"floatValue": { "type" : "double" },
"datetimeValue": { "type" : "date", "format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd" },
"booleanValue": { "type" : "boolean" }
}
}
}
}
}
}'
Поиск должен быть выполнен в том же вложенном запросе с использованием AND, а агрегации должны быть выполнены во вложенной агрегации.Я сделал это для динамических полей, но это, вероятно, можно настроить для чего-то еще.Я сомневаюсь, что с поисковыми / агрегируемыми полями может быть больше гибкости из-за принципов работы индексов.