计算与另一个聚合相交的术语字段中的出现次数

时间:2018-10-12 03:03:46

标签: elasticsearch

我有以下文件:

[
  {
    "name": "foo",
    "types": [
      {"uses": "bar", "value": 1},
      {"uses": "baz", "value": 2}
    ]
  },
  {
    "name": "bar",
    "types": [
      {"uses": "bar", "value": 1},
      {"uses": "qux", "value": 3}
    ]
  },
  ...
]

我首先要汇总“名称”值,然后将这些术语的出现次数计算为“ types.uses”的值,例如:

  1. 名称:[“ foo”,“ bar”,“ baz”,“ biz”,“ qux]
  2. type_uses:{“ bar”:2,“ baz”:1,“ qux”:1}

此请求感觉类似于以下问题: Elasticsearch documents that only have terms intersecting a list of terms but no other terms
但在这个问题中,它以文字术语列表开头,而我想在管道中生成术语列表以供计数阶段使用。

我知道我可以在两个查询中做到这一点,首先提取“名称”字词列表,然后构建另一个查询,以过滤文档中“ types.uses”在我的字面量列表中的文档,将这些结果汇总。但是我认为应该可以通过管道在一个查询中执行此操作。我试图弄乱管道存储区选择器和脚本,但并没有多大意义。

这是查询的基础:

{
  "query": {
    "bool": {
      "should": [
        ...
      ],
      "must_not": [
        ...
      ],
      "minimum_should_match": 1
    }
  },
  "aggs": {
    "names": {
      "terms": {
        "field": "name.keyword"
      }
    }
  },
  "size": 0
}

因此,我的查询过滤了正确的文档集,并且我的名字也是如此。现在,我要计算这些特定名称在该文档集的“ types.uses”中出现的次数。

0 个答案:

没有答案