从脚本ElasticSearch / Painless中的aggs获取结果

时间:2018-11-23 14:26:29

标签: elasticsearch kibana elasticsearch-painless

我是ElasticSearch世界的新手。我一直在尝试编写简单的请求,我需要在脚本中获取aggs结果以使条件简单。有可能这样做吗? 以下条件仅作为示例。

MessageListenerContainer

1 个答案:

答案 0 :(得分:0)

要求是对具有相同字段名称

多个索引执行sum aggregation

现在具有多个索引,您将必须检查该索引中是否存在特定字段 ,并且该字段是否具有相同数据类型

索引

我创建了三个索引,只有一个名为num的字段。

index_1
     - num: long

index_2
     - num: long

index_3
     - num: text
          : fielddata: true

还要注意,如果该字段的类型为text,那么我已经设置了其属性fielddata:true。但是,如果未设置,则下面的查询将为您提供聚合结果以及错误,提示您无法检索类型为text的值作为其分析字符串,并且只能使用doc用于non_analyzed的字段。

样本查询:

POST /_search
{  
   "size":0,
   "query":{  
      "bool":{  
         "filter":[  
            {  
               "exists":{  
                  "field":"num"
               }
            }
         ]
      }
   },
   "aggs":{  
      "myaggs":{  
         "sum":{  
            "script":{  
               "source":"if(doc['num'].value instanceof long) return doc['num'].value;"
            }
         }
      }
   }
}

查询是否无法设置fielddata:true

在这种情况下,您需要明确提及要聚合的索引。

POST /_search
{  
   "size":0,
   "query":{  
      "bool":{  
         "filter":[  
            {  
               "exists":{  
                  "field":"num"
               }
            },
            {  
               "terms":{  
                  "_index":[  
                     "index_1",
                     "index_2"
                  ]
               }
            }
         ]
      }
   },
   "aggs":{  
      "myaggs":{  
         "sum":{  
            "script":{  
               "source":"if(doc['num'].value instanceof long) return doc['num'].value;"
            }
         }
      }
   }
}

希望这会有所帮助!