Elasticsearch按字段或缺少字段分组

时间:2015-08-13 09:53:42

标签: elasticsearch group-by aggregation

我对弹性搜索有困难。

这是我想要做的:

让我们说索引的单位如下:

{
  transacId: "qwerty",
  amount: 150,
  userId: "adsf",
  client: "mobile",
  goal: "purchase"
}

我想构建这些数据的不同类型的统计数据,而elasticsearch真的很快。我遇到的问题是,在我的系统中,用户可以根据需要在事务中添加新字段。我们假设我们在同一个索引中有另一行:

{
  transacId: "qrerty",
  amount: 200,
  userId: "adsf",
  client: "mobile",
  goal: "purchase",
  token_1: "game"
}

所以现在我想按token_1分组。

{
  query: {
    match: {userId: "asdf"}
  },
  aggs: {
    token_1: {
      terms: {field: "token_1"},
      aggs: {sumAmt: {sum: {field: "amount"}}} 
    }
  }
}

这里的问题是它只聚合带有字段token_1的文档。我知道有聚合missing,我可以这样做:

{
  query: {
    match: {userId: "asdf"}
  },
  aggs: {
    token_1: {
      missing: {field: "token_1"},
      aggs: {sumAmt: {sum: {field: "amount"}}} 
    }
  }
}

但在这种情况下,它只聚合没有字段token_1的文档,我想要的是在查询中聚合两种类型的文档。我尝试过这样做,但它也不适合我:

{
  query: {
    match: {userId: "asdf"}
  },
  aggs: {
    token_1: {
      missing: {field: "token_1"},
      aggs: {sumAmt: {sum: {field: "amount"}}} 
    },
    aggs: {
      token_1: {
        missing: {field: "token_1"},
        aggs: {sumAmt: {sum: {field: "amount"}}} 
      }
    }
  }
}

我想可能在聚合中有类似运算符的东西,但我找不到任何东西。请帮帮我。

0 个答案:

没有答案