我如何在 Elasticsearch 中找到存储在数组变量中的总项目

How do i find the the total items stored in an array variable in Elasticsearch

我有一个文件可以说

{ 
    "id" : "someID", 
    "name" : "someName", 
    "states" : ["A", "B", "C"]  }

现在我需要找到每个文档中状态数的总和, 我使用了以下查询,

 {
          "aggs" : {
                  "value" : {
                                  "sum" : {
                                          "_script" : {
                                                  "script" : "doc[\"states\"].values.length"
                                          }
                                  }
                  }
          }
  }' 

但是我收到以下错误,

{
  "error" : "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; shardFailures {[NeZRO8O8Rn2n7hH66anZTw][w3-commsvc][0]: SearchParseException[[w3-commsvc][0]: from[-1],size[-1]: Parse Failure [Failed to parse source [\n{\n\t\"aggs\" : {\n\t\t\"value\" : {\n\t\t\t\t\"sum\" : { \n\t\t\t\t\t\"_script\" : {\n\t\t\t\t\t\t\"script\" : \"doc[\\"states\\"].values.length\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t}\n\t}\n}]]]; nested: SearchParseException[[w3-commsvc][0]: from[-1],size[-1]: Parse Failure [Unexpected token START_OBJECT in [value].]]; }{[NeZRO8O8Rn2n7hH66anZTw][w3-commsvc][1]: SearchParseException[[w3-commsvc][1]: from[-1],size[-1]: Parse Failure [Failed to parse source [\n{\n\t\"aggs\" : {\n\t\t\"value\" : {\n\t\t\t\t\"sum\" : { \n\t\t\t\t\t\"_script\" : {\n\t\t\t\t\t\t\"script\" : \"doc[\\"states\\"].values.length\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t}\n\t}\n}]]]; nested: SearchParseException[[w3-commsvc][1]: from[-1],size[-1]: Parse Failure [Unexpected token START_OBJECT in [value].]]; }{[NeZRO8O8Rn2n7hH66anZTw][w3-commsvc][2]: SearchParseException[[w3-commsvc][2]: from[-1],size[-1]: Parse Failure [Failed to parse source [\n{\n\t\"aggs\" : {\n\t\t\"value\" : {\n\t\t\t\t\"sum\" : { \n\t\t\t\t\t\"_script\" : {\n\t\t\t\t\t\t\"script\" : \"doc[\\"states\\"].values.length\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t}\n\t}\n}]]]; nested: SearchParseException[[w3-commsvc][2]: from[-1],size[-1]: Parse Failure [Unexpected token START_OBJECT in [value].]]; }{[NeZRO8O8Rn2n7hH66anZTw][w3-commsvc][3]: SearchParseException[[w3-commsvc][3]: from[-1],size[-1]: Parse Failure [Failed to parse source [\n{\n\t\"aggs\" : {\n\t\t\"value\" : {\n\t\t\t\t\"sum\" : { \n\t\t\t\t\t\"_script\" : {\n\t\t\t\t\t\t\"script\" : \"doc[\\"states\\"].values.length\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t}\n\t}\n}]]]; nested: SearchParseException[[w3-commsvc][3]: from[-1],size[-1]: Parse Failure [Unexpected token START_OBJECT in [value].]]; }{[NeZRO8O8Rn2n7hH66anZTw][w3-commsvc][4]: SearchParseException[[w3-commsvc][4]: from[-1],size[-1]: Parse Failure [Failed to parse source [\n{\n\t\"aggs\" : {\n\t\t\"value\" : {\n\t\t\t\t\"sum\" : { \n\t\t\t\t\t\"_script\" : {\n\t\t\t\t\t\t\"script\" : \"doc[\\"states\\"].values.length\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t}\n\t}\n}]]]; nested: SearchParseException[[w3-commsvc][4]: from[-1],size[-1]: Parse Failure [Unexpected token START_OBJECT in [value].]]; }]",
  "status" : 400
}

有人可以建议正确的查询吗??

因为您需要 "states" 字段中的元素数量,那么试试这个:

{
     "query": {
        "match": {
           "id": "someID"
        }
    },
    "aggs":{
        "value" :  {  
            "value_count" : { "field" : "states"} 
        } 
    }
}

您可以参考这里了解更多信息:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-valuecount-aggregation.html

这应该是正确的查询:

{
  "aggs": {
    "value": {
      "sum": {"script": "doc['states'].size()"}
    }
  }
}