我对弹性搜索有困难。
这是我想要做的:
让我们说索引的单位如下:
{
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"}}}
}
}
}
}
我想可能在聚合中有类似运算符的东西,但我找不到任何东西。请帮帮我。