elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Java 弹性搜索中的聚合

Java 弹性搜索中的聚合,java,elasticsearch,Java,elasticsearch,我想在日期字段上为elasticsearch查询应用GROUPBY子句。这是我的密码 SearchRequestBuilder srb = client .prepareSearch(ConstantsValue.indexName) .setTypes(ConstantsValue._Type) .addAggregation( Aggregat

我想在日期字段上为elasticsearch查询应用GROUPBY子句。这是我的密码

SearchRequestBuilder  srb  = client
                .prepareSearch(ConstantsValue.indexName)
                .setTypes(ConstantsValue._Type)
                .addAggregation(

                        AggregationBuilders
                          .dateHistogram("aggs")
                          .field("DTCREATED")
                          .interval(Interval.MONTH)
                          .format("yyyy-MM-dd")
                          .preZone("+05:30")
                          .preZoneAdjustLargeInterval(true)
                          .minDocCount(1)       
                        )
                .setSize(Integer.MAX_VALUE)
                .setQuery(query);  

SearchResponse response =    srb
            .setSearchType(SearchType.QUERY_AND_FETCH)
            .setFetchSource(ConstantsValue.fieldList, null)
            .execute()
            .actionGet();
但查询不会返回预期结果

结果显示如下

Value  :{"DTCREATED":"2016-09-29T18:30:00.000Z"}
Key  :AVfdaeSC3n3Bn-RaoFgg
Value  :{"DTCREATED":"2016-09-29T18:30:00.000Z"}
Key  :AVfdaeSC3n3Bn-RaoFgl
Value  :{"DTCREATED":"2016-09-29T18:30:00.000Z"}
Key  :AVfdaeSC3n3Bn-RaoFgq
Value  :{"DTCREATED":"2016-08-31T18:30:00.000Z"}
Key  :AVfdaeSC3n3Bn-RaoFgv
Value  :{"DTCREATED":"2016-09-06T18:30:00.000Z"}
Key  :AVfdaeSC3n3Bn-RaoFg0
Value  :{"DTCREATED":"2016-09-22T18:30:00.000Z"}
Key  :AVfdaeSC3n3Bn-RaoFg5
Value  :{"DTCREATED":"2016-09-22T18:30:00.000Z"}
Key  :AVfdaeSC3n3Bn-RaoFhA
Value  :{"DTCREATED":"2016-09-12T18:30:00.000Z"}
Key  :AVfdaeSC3n3Bn-RaoFhF
我是elasticsearch的新手,不知道我错过了什么。 非常感谢您的帮助

ES中没有groupby-like子句,但是您可以使用,以便按所需字段进行分组。例如,我使用下面的post http请求,以便使用userid进行分组,并获取每个userid的计数

搜索查询如下所示:

{  
   "query":{  
      "query_string":{  
         "query":"api:\"smsmessaging\" AND operatorid:\"ROBI\""
      }
   },
   "aggs":{  
      "total":{  
         "terms":{  
            "field":"userid"
         },
         "aggs":{  
            "grades_count":{  
               "value_count":{  
                  "script":"doc['userid'].value"
               }
            }
         }
      }
   }
}

在上面,response_summary是索引。我正在试着搜索

请求的主体可以是这样的:

{  
   "query":{  
      "query_string":{  
         "query":"api:\"smsmessaging\" AND operatorid:\"ROBI\""
      }
   },
   "aggs":{  
      "total":{  
         "terms":{  
            "field":"userid"
         },
         "aggs":{  
            "grades_count":{  
               "value_count":{  
                  "script":"doc['userid'].value"
               }
            }
         }
      }
   }
}

因此,您可以在aggs标记中提及要分组的字段,并在上面的示例中获取计数。你可以随意修改。也可以看看线程。

您的查询是什么样子的?我有SQL查询-从tableName中选择DistinctStatus,countSSTATUS,TO_DATE dtcreated,'DD.MON.YYYY',其中SSTATUS像'CANCELLED'group by TO_DATE dtcreated,'DD.MON.YYYY',然后选择Status,sstatus order by sstatus您是如何用java查询它的?您正在代码中直接使用SQL查询?Kibana生成的查询也在代码中,但它不起作用不使用SearchRequest类并将Kibana查询传递到其源字段很高兴它有所帮助: