我有一些文件存储在Elasticsearch中,如下所示:
{
"date" : 1,
"field1" : 0.2,
"field2" : 0.5,
"field3" : 0.3
},
{
"date" : 1,
"field1" : 0.9,
"field2" : 0.5,
"field3" : 0.1
},
{
"date" : 2,
"field1" : 0.2,
"field2" : 0.6,
"field3" : 0.7
}
我想得到的是字段1、字段2或字段3对每个文档的最大次数的计数,按日期分组,即。期望结果如下:
{
"date" : 1,
"field1-greatest" : 1,
"field2-greatest" : 1,
"field3-greatest" : 0
},
{
"date" : 2,
"field1-greatest" : 0,
"field2-greatest" : 0,
"field3-greatest" : 1
}
我在date上使用了一个术语聚合,但不知道如何比较不同的字段,以便使用Elasticsearch聚合来执行此max and count类型的操作。有什么建议吗?
您可以使用以下选项:
{
"size": 0,
"aggs": {
"by_date": {
"terms": {
"field": "date"
},
"aggs": {
"field1_greatest": {
"max": {
"field": "field1"
}
},
"field2_greatest": {
"max": {
"field": "field2"
}
},
"field3_greatest": {
"max": {
"field": "field3"
}
}
}
}
}
}
提示:请确保您的字段*
属性映射为typedouble
,而不是
float
,因为例如,字段1的最大agg可能会产生
0.8999979761581421,而不是
0.9
。
更正
这是一个非同寻常的用例,因此您可能需要使用脚本。以下是让您开始的内容:
{
"size": 0,
"aggs": {
"by_date": {
"terms": {
"field": "date"
},
"aggs": {
"by_greatest": {
"scripted_metric": {
"init_script": """
state.field1_greatest = 0;
state.field2_greatest = 0;
state.field3_greatest = 0;
""",
"map_script": """
def v1 = doc['field1'].value;
def v2 = doc['field2'].value;
def v3 = doc['field3'].value;
// your comparison logic
""",
"combine_script": "state",
"reduce_script": "states"
}
}
}
}
}
}
我正在尝试获取日期的最大值和最小值。 从文档中,我看不到composite中的max选项:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html#_value_sources 我想要这样的东西: 是否可以添加到此查询中,
问题内容: 如何为特定类型执行ElasticSearch聚合?我意识到您可以在请求网址中指定索引和/或类型,但是我想对两种不同的类型进行汇总。 谢谢! 问题答案: 您可以按类型过滤聚合,然后使用子聚合。例如:
我是Elasticsearch的新手,我希望在Elasticsearch 5的字段上执行某些聚合。x索引。我有一个索引,其中包含带有字段(具有嵌套结构)和字段(具有嵌套结构)的文档。这些是动态映射的字段。以下是示例文档 文件2: DOC 3: 我想在langs字段上执行总和聚合,这样对于每个键(X/Y)和每种语言,我都可以获得索引中所有文档的总和。此外,我还想从docLang字段生成每种语言类型的
问题内容: 我将此数据插入了Elasticsearch: 旁注:重现: 1)下载:http://wmo.co/20160928_es_query/bulk.json 2)执行:卷曲-s -XPOST ‘ 的http://本地主机:9200 /测试/外部/ _bulk漂亮 ‘ -数据二进制@ bulk.json 问题: 获取每个“位置”有多少记录的计数。 解决方案1:存储桶聚合..没有得到期望的结果
Elasticsearch新手问题。我上了莎士比亚的课。json转换为Elastic,我正试图找出如何进行类似于按说话人从行组中计数(1)的聚合。(“Line”是文档的类型,“speaker”是属性之一。) 现在我有一个这样的查询: 结果看起来不错,但ElasticSearch文档指定术语聚合的文档计数是近似值(https://www.elastic.co/guide/en/elasticsear
问题内容: 示例文档中有一个简化的文档。这对我理解非嵌套类型与嵌套类型的聚合差异很有帮助。但是,这种简化掩盖了进一步的复杂性,因此我不得不在这里扩展这个问题。 所以我的实际文件更接近以下内容: 因此,我保留了,和的关键属性,但隐藏了许多其他使情况复杂化的内容。首先,请注意,与引用的问题相比,有很多额外的嵌套:在根和“项目”之间,以及在“项目”和“ item_property_1”之间。此外,还请注