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) 我想编写一个应该返回字典的无痛脚本。基本上,如果我将它与 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
我将Elasticsearch版本升级5.4到7.1. 我有一个关于5.4版本的查询,但是相同的查询7.1抛出异常。
查询格式错误,发现空子句
询问 :
{
"query": {"match_all": {}}
,"aggs": {
"price": {
"aggs": {
"tt": {
"terms": {
"field": "platformType"
}
}
},
"filter": {
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
过滤器为空,因为我使用条件较少的术语查询。有什么解决办法吗?
先感谢您。
我在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 2.3,对于用户在我的网站中访问的每个网页,我都会生成一条包含用户会话 ID 和当前时间戳的记录。
所以我有一些具有相同会话 ID 但不同时间戳的记录。
我正在尝试从用户记录中创建一个date_histogram具有唯一会话 ID 的会话。
创建没有唯一性的直方图很容易:
{
"aggs" : {
"users_sessions" : {
"date_histogram" : {
"field" : "date",
"interval" : "1h"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是是否有可能拥有具有唯一值的日期直方图(例如,每个唯一会话 ID 的第一次出现)?
我需要在 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) 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 …
我有这个模拟数据,我想对其进行分组,然后只有当状态为 时,它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) 我的索引中有以下数据。
{
"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) 我正在尝试通过可穿戴设备使用情况的统计数据来提取用户。忠实用户是指最近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)