elasticsearch - 管道桶选择器不适用于嵌套对象
问题描述
我想获取嵌套对象的聚合,然后按这些聚合的结果进行过滤。我尝试过使用bucket_selector
,但 ES 向我抛出以下错误:
{
"error" : {
"root_cause" : [ ],
"type" : "search_phase_execution_exception",
"reason" : "",
"phase" : "fetch",
"grouped" : true,
"failed_shards" : [ ],
"caused_by" : {
"type" : "class_cast_exception",
"reason" : "class org.elasticsearch.search.aggregations.bucket.nested.InternalNested cannot be cast to class org.elasticsearch.search.aggregations.InternalMultiBucketAggregation (org.elasticsearch.search.aggregations.bucket.nested.InternalNested and org.elasticsearch.search.aggregations.InternalMultiBucketAggregation are in unnamed module of loader 'app')"
}
},
"status" : 500
}
这是我的模拟数据索引:
PUT /creature
{
"mappings": {
"properties": {
"id": {
"type": "keyword"
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"creature_deed": {
"type": "nested",
"properties": {
"id": {
"type": "keyword"
},
"deed_type": {
"type": "keyword"
}
}
}
}
}
}
PUT /creature/_doc/1
{
"id": "1",
"name": "alpha",
"creature_deed": [
{
"id": 1,
"deed_type": "GET_TYPE"
},
{
"id": 2,
"deed_type": "GET_TYPE"
}
]
}
PUT /creature/_doc/2
{
"id": 2,
"name": "beta",
"creature_deed": [
{
"id": 1,
"deed_type": "GET_TYPE"
},
{
"id": 2,
"deed_type": "GET_TYPE"
},
{
"id": 3,
"deed_type": "GET_TYPE"
}
]
}
PUT /creature/_doc/3
{
"id": 3,
"name": "gamma",
"creature_deed": [
{
"id": 1,
"deed_type": "GITTEN_TYPE"
},
{
"id": 2,
"deed_type": "GET_TYPE"
}
]
}
这是我的实际查询:
GET creature/_search
{
"size": 0,
"aggs": {
"creatures": {
"terms": {
"field": "name.keyword"
},
"aggs": {
"creature_deed": {
"nested": {
"path": "creature_deed"
},
"aggs": {
"creature_get_count": {
"terms": {
"field": "creature_deed.deed_type"
}
},
"creature_get_count_filtered": {
"bucket_selector": {
"buckets_path": {
"creatureGetCount": "creature_get_count"
},
"script": "params.creatureGetCount > 2"
}
}
}
}
}
}
}
}
弹性搜索版本:docker.elastic.co/elasticsearch/elasticsearch:7.13.0
Kibana 版本:docker.elastic.co/kibana/kibana:7.13.0
解决方案
推荐阅读
- ios - 在现有的 Git 存储库中创建一个新的 Xcode 项目
- java - MySQLIntegrityConstraintViolationExceptionnnn
- algorithm - 图中具有特定距离的顶点对
- amazon-web-services - AWS ELB/ALB 多个 SSL 证书
- docker - 所有 docker swarm 实例都可以在同一台机器上运行吗?
- php - 用于删除我的字段值的按钮
- python - Keas 中的 SGD 究竟是如何工作的?
- javascript - 在 Laravel 中延迟解析 Javascript
- django - Django:两列之和的最大值
- python - 从多索引熊猫数据框中选择单个行