ElasticSearch按字段将文档聚合到数组中

杰伊:

我正在尝试将以下逻辑作为Java中的查询写到elasticsearch:

ES包含以下文档:

{"request" : 1, "store":"ebay", "status" : "retrieved" , "lastdate": "2012/12/20 17:00", "retrieved_by" : "John"}
{"request" : 1, "store":"ebay", "status" : "stored" , "lastdate": "2012/12/20 18:00", "stored_by" : "Alex"}
{"request" : 1, "store":"ebay", "status" : "bought" , "lastdate": "2012/12/20 19:00", "bought_by" : "Arik"}
{"request" : 2, "store":"aliexpress", "status" : "retrieved" , "lastdate": "2012/12/20 17:00"}
{"request" : 2, "store":"aliexpress","status" : "stored" , "lastdate": "2012/12/20 18:00"}
{"request" : 2, "store":"aliexpress","status" : "bought" , "lastdate": "2012/12/20 19:00"}

我正在尝试编写一个查询,该查询将获取商店名称作为输入,并返回通过其request_id汇总到数组中的该商店的请求。

换句话说,我正在尝试:

1.按条款对特定字段(“商店”)进行过滤。

2.将基于特定字段(“请求”)的结果汇总到一个数组中

例如,输入“ ebay”:

{
"1" : [
{"request" : 1, "store":"ebay", "status" : "retrieved" , "lastdate": "2012/12/20 17:00", "retrieved_by" : "John"}
{"request" : 1, "store":"ebay", "status" : "stored" , "lastdate": "2012/12/20 18:00", "stored_by" : "Alex"}
{"request" : 1, "store":"ebay", "status" : "bought" , "lastdate": "2012/12/20 19:00", "bought_by" : "Arik"}
],

".." : [...]

}

它并不重要,结果中的密钥将是请求(我将购买任何密钥)。重要的部分是我将请求字段中的所有记录聚合到一个数组中,并按lastdate在数组中对它们进行排序。

我的最终目标是使用java QueryBuilder创建此查询。因此,我首先尝试使用弹性本机查询语言,以便了解要使用的QueryBuilder。

乔:

设置基本映射:

PUT stores
{
  "mappings": {
    "properties": {
      "lastdate": {
        "type": "date",
        "format": "yyyy/MM/dd HH:mm"
      }
    }
  }
}

同步一些文档:

POST _bulk
{"index":{"_index":"stores","_type":"_doc"}}
{"request":1,"store":"ebay","status":"retrieved","lastdate":"2012/12/20 17:00","retrieved_by":"John"}
{"index":{"_index":"stores","_type":"_doc"}}
{"request":1,"store":"ebay","status":"stored","lastdate":"2012/12/20 18:00","stored_by":"Alex"}
{"index":{"_index":"stores","_type":"_doc"}}
{"request":1,"store":"ebay","status":"bought","lastdate":"2012/12/20 19:00","bought_by":"Arik"}
{"index":{"_index":"stores","_type":"_doc"}}
{"request":2,"store":"aliexpress","status":"retrieved","lastdate":"2012/12/20 17:00"}
{"index":{"_index":"stores","_type":"_doc"}}
{"request":2,"store":"aliexpress","status":"stored","lastdate":"2012/12/20 18:00"}
{"index":{"_index":"stores","_type":"_doc"}}
{"request":2,"store":"aliexpress","status":"bought","lastdate":"2012/12/20 19:00"}

过滤查询,然后按request字段进行汇总并使用sorted top_hits

GET stores/_search
{
  "size": 0, 
  "query": {
    "term": {
      "store": {
        "value": "ebay"
      }
    }
  },
  "aggs": {
    "by_req": {
      "terms": {
        "field": "request"
      },
      "aggs": {
        "hits": {
          "top_hits": {
            "sort": [
              {
                "lastdate": {
                  "order": "desc"
                }
              }
            ]
          }
        }
      }
    }
  }
}

将其转换为Java DSL并不难。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Mongo聚合中合并文档中的数组字段

ElasticSearch从数组字段过滤聚合

在嵌套对象的数组字段中按ID查找子文档

Postgres:将列聚合到数组中

如何将列聚合到JSON数组中?

如何按条件将数据聚合到多个不同的汇总列中?

Mongodb将文档聚合到嵌套层次结构中

将窗口聚合到Pandas DataFrame中的数组

在Elasticsearch中按嵌套字段值的总和查询文档

如何使用jq将子值聚合到数组中?

groupBy之后如何将列值聚合到数组中?

如何将一个字段的值聚合到一个数组中?

将单个键的多个值聚合到单个存储桶Elasticsearch中

如何将PostgreSQL中jsonb_path_query的结果聚合到数组中?

将数据从Excel聚合到Access中

在聚合mongodb中按文档数组排序

MongoDB聚合:将单独的文档字段投影到单个数组字段中

如何使用java在Elasticsearch中按字段属性搜索文档?

使用jQuery将多个列表元素的名称聚合到单个数组中

N1QL:将来自不同级别文档的不同值聚合到一个数组中

将所有文档减少到聚合中的数组

将列数据聚合到描述中

将向量聚合到数据帧中

在 lodash 中使用 _.groupBy 将字符串聚合到数组中

如何在Elasticsearch中按文档数组中的多个对象字段进行查询?

ElasticSearch - 如何按 JSON 字段中的特定字段查询文档

Elasticsearch,按數組字段的值聚合

Elasticsearch:如何从嵌套文档聚合到每个主文档?

如何将文档流聚合成具有数组字段的单个文档?(mongodb)