标签: elasticsearch-aggregation

Elasticsearch:深度嵌套聚合下的reverse_nested聚合不起作用

Elasticsearch 版本:2.3.3

基本上标题说明了一切。如果reverse_nested在第二个嵌套聚合下使用,尽管文档似乎通过reverse_nested(参见结果中的最后一个"doc_count"字段)来限定范围,但它后面的聚合以某种方式不起作用。

这里我准备了一个例子 - 一个文档是一个包含入学日期和考试历史的学生。

映射:

{
    "mappings": {
        "students": {
            "properties": {
                "name": {
                    "type": "string"},
                "enrollment": {
                    "type": "date"},
                "exam_histories": {
                    "type": "nested",
                    "properties": {
                        "date": {
                            "type": "date"},
                        "subjects": {
                            "type": "nested",
                            "properties": {
                                "name": {
                                    "type": "string"},
                                "score": {
                                    "type": "short"}}}}}}}}}
Run Code Online (Sandbox Code Playgroud)

测试文档:

{
    "name": "John",
    "enrollment": "2012-09-01T00:00:00+00:00",
    "exam_histories": [
        {
            "date": "2016-05-05T00:00:00+00:00",
            "subjects": [
                {
                    "name": "math",
                    "score": 90}]}]}
Run Code Online (Sandbox Code Playgroud)

聚合查询(没有实际意义):

{
    "aggs": {
        "nested_exam_histories": {
            "nested": {
                "path": "exam_histories"}, …
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-aggregation

3
推荐指数
1
解决办法
3986
查看次数

如何创建字典对象并在无痛弹性搜索中向其添加数据

我想编写一个应该返回字典的无痛脚本。基本上,如果我将它与 java 相关联,我想要 Dictionary< String, List > 的输出。

所以,我需要轻松声明一个 Map 和 List。另外,我需要向其中添加数据(如map.add())

我可以举例说明如何声明地图并向其添加数据吗?

[painless] ( https://www.elastic.co/guide/en/elasticsearch/painless/6.7/painless-examples.html )中的示例并未涵盖这一点。

我用的是v6.7

elasticsearch elasticsearch-aggregation elasticsearch-painless

3
推荐指数
1
解决办法
5359
查看次数

Elasticsearch 空过滤器聚合

我将Elasticsearch版本升级5.47.1. 我有一个关于5.4版本的查询,但是相同的查询7.1抛出异常。

查询格式错误,发现空子句

询问 :

{
    "query": {"match_all": {}}
    ,"aggs": {
       "price": {
           "aggs": {
              "tt": {
                  "terms": {
                     "field": "platformType"
                  }
              }
           },
           "filter": {

           }
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

过滤器为空,因为我使用条件较少的术语查询。有什么解决办法吗?

先感谢您。

elasticsearch elasticsearch-aggregation

3
推荐指数
1
解决办法
1250
查看次数

如何在elasticsearch中的嵌套聚合中存储空和非空字段?

我在elasticsearch中有以下一组嵌套子聚合(field2是field1的子聚合,field3是field2的子聚合)。然而事实证明,field3 的术语聚合不会对没有 field3 的文档进行存储桶。

我的理解是,除了 field3 的术语查询之外,我还必须使用 Missing 子聚合查询来对这些查询进行存储。

但我不确定如何将其添加到下面的查询中以将两者都存储起来。

{
  "size": 0,
  "aggregations": {
    "f1": {
      "terms": {
        "field": "field1",
        "size": 0,
        "order": {
          "_count": "asc"
        },
        "include": [
          "123"
        ]
      },
      "aggregations": {
        "field2": {
          "terms": {
            "field": "f2",
            "size": 0,
            "order": {
              "_count": "asc"
            },
            "include": [
              "tr"
            ]
          },
          "aggregations": {
            "field3": {
              "terms": {
                "field": "f3",
                "order": {
                  "_count": "asc"
                },
                "size": 0
              },
              "aggregations": {
                "aggTopHits": {
                  "top_hits": {
                    "size": 1
                  }
                }
              } …
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-aggregation

2
推荐指数
1
解决办法
4323
查看次数

唯一值的日期直方图

我正在使用 Elasticsearch 2.3,对于用户在我的网站中访问的每个网页,我都会生成一条包含用户会话 ID 和当前时间戳的记录。
所以我有一些具有相同会话 ID 但不同时间戳的记录。
我正在尝试从用户记录中创建一个date_histogram具有唯一会话 ID 的会话。

创建没有唯一性的直方图很容易:

{
    "aggs" : {
        "users_sessions" : {
            "date_histogram" : {
                "field" : "date",
                "interval" : "1h"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是是否有可能拥有具有唯一值的日期直方图(例如,每个唯一会话 ID 的第一次出现)?

elasticsearch date-histogram elasticsearch-aggregation

2
推荐指数
1
解决办法
1481
查看次数

范围 ElasticSearch 聚合

我需要在 ElasticSearch 中计算管道聚合,但我不知道如何表达它。

每个文档都有一个电子邮件地址和一个金额。我需要输出按唯一电子邮件分组的金额计数范围。

{ "0 - 99": 300, "100 - 400": 100 ...}
Run Code Online (Sandbox Code Playgroud)

基本上是预期的输出(密钥将在我的应用程序代码中转换),表明 300 封独特的电子邮件在所有文档中累计收到至少 99 封(数量)。

直觉上,我希望像下面这样的查询。但是,范围似乎不是存储桶聚合(或允许存储桶路径)。

这里的正确方法是什么?

{
 aggs: {
   users: {
     terms: {
       field: "email"
     },
     aggs: {
       amount_received: {
         sum: {
           field: "amount"
         }
       }
     }
   },
   amount_ranges: {
     range: {
       buckets_path: "users>amount_received",
       ranges: [
           { to: 99.0 },
           { from: 100.0, to: 299.0 },
           { from: 300.0, to: 599.0 },
           { from: 600.0 }
       ]
     }
   }
}
  }
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-aggregation

2
推荐指数
1
解决办法
455
查看次数

Elasticsearch Aggregations: Only return results of one of them?

I'm trying to find a way to only return the results of one aggregation in an Elasticsearch query. I have a max bucket aggregation (the one that I want to see) that is calculated from a sum bucket aggregation based on a date histogram aggregation. Right now, I have to go through 1,440 results to get to the one I want to see. I've already removed the results of the base query with the size: 0 modifier, but is there …

elasticsearch elasticsearch-aggregation

2
推荐指数
1
解决办法
1552
查看次数

Elasticsearch 根据条件求和

我有这个模拟数据,我想对其进行分组,然后只有当状态为 时,它name才有一个字段,该字段是字段total的总和。valuewon

[{
  name: 'Foo',
  value: 12,
  status: 'won'
},
{
  name: 'Foo',
  value: 2,
  status: 'lost'
},
{
  name: 'Foo',
  value: 10,
  status: 'won'
},
{
  name: 'Bar',
  value: 4,
  status: 'won'
}]
Run Code Online (Sandbox Code Playgroud)

我能够按名称分组并获取值字段的总和,但尚未弄清楚如何仅对获胜案例进行求和。

aggs: {
  by_name: {
    terms: {
      field: 'name'
    },
    aggs: {
      total_value: {
        sum: {
          field: 'value' // What I want is value if status == 'won' 
        }
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

我想要的结果应该是这样的:

[{
  name: 'Foo',
  total_value: 22 …
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-aggregation

2
推荐指数
1
解决办法
4495
查看次数

弹性搜索 按字段分组

我的索引中有以下数据。

{
"id":1,
"car_name" : "ABC-101"
},
{
"id":2,
"car_name" : "DEF-102"
},
{
"id":3,
"car_name" : "ABC-103"
}
Run Code Online (Sandbox Code Playgroud)

我的索引的映射是

{
  "car": {
    "mappings": {
      "_doc": {
        "properties": {
          "car_name": {
            "type": "text",
            "fielddata": true
          }
        }
      }
    }
  } 
}
Run Code Online (Sandbox Code Playgroud)

我运行以下查询

 localhost:9200/car/_doc/_search?pretty
Run Code Online (Sandbox Code Playgroud)

具有以下请求正文

{
"size" : 0,
"aggs" : {
    "genres" : {
        "terms" : { 
            "field" : "car_name"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

}

我得到以下回复

"buckets": [
    {
      "key": "ABC",
      "doc_count": 2
    },
    {
      "key": "DEF",
      "doc_count": 1
    },
    { …
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-aggregation

2
推荐指数
1
解决办法
3591
查看次数

Elasticsearch 上的存储桶计数

我正在尝试通过可穿戴设备使用情况的统计数据来提取用户。忠实用户是指最近30天内使用可穿戴设备超过20天且平均每天使用可穿戴设备大于4小时的用户。因此,简而言之,忠实用户 =(至少 20 天使用时间 + 每天平均使用时间 > 4 小时)

在 Elasticsearch 中,使用文档根据日期和使用时间进行索引。

{
id:"AL-2930",
"usage_duration":4.5,
"sessionDate":"2020-05-01" 
},
{
id:"AL-2930",
"usage_duration":5.5,
"sessionDate":"2020-05-02" 
},
{
id:"AL-2931",
"usage_duration":3.5,
"sessionDate":"2020-05-01" 
},
{
id:"AL-2931",
"usage_duration":3.0,
"sessionDate":"2020-05-02" 
},
Run Code Online (Sandbox Code Playgroud)

我尝试运行的查询给出了正确的结果。

{

  "aggs": {
    "users": {
     "terms": {
        "field": "id",
        "min_doc_count": 20,
        "order" : { "_key" : "asc" }
      },
   
      "aggs": {
        "avg_usage": {
          "avg": {
            "field": "usage_duration"
          }
           
        },
        "usage_filter": {
          "bucket_selector": {
            "buckets_path": {
              "avgUsage": "avg_usage"
            },
            "script": "params.avgUsage > 4.0"
          }
        
        }
        
      }
    }

  } …
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-aggregation

2
推荐指数
1
解决办法
2433
查看次数