弹性搜索平面索引结构
Elastic search flat index structure
我的平面数据是这样的:
[
{
user: "User1",
fullName: "George Mann",
moneyUsed: 12.0,
month: "2022-01-31"
},
{
user: "User1",
fullName: "George Man",
moneyUsed: 13.0,
month: "2022-02-28"
},
{
user: "User1",
fullName: "George Man",
moneyUsed: 14.0,
month: "2022-03-31"
},
{
user: "User2",
fullName: "Mary Mann",
moneyUsed: 17.0,
month: "2022-01-31"
}
]
这种类型的结构使我可以轻松地对用户花费的金额进行汇总,因为每个用户的每个月都是单独存储的。
我遇到的问题是当我尝试在用户 table(用户,全名)中显示所有唯一用户时。
例如,如果我有 100 个唯一用户,我不确定向他们展示考虑排序和分页的最佳方法是什么。
我正在考虑为每个用户的最近一个月添加一个新字段“mostRecent”。通过这种方式,我可以轻松地为每个用户识别 ES 中的最新条目。
实现此方案的最佳方法是什么?
您可以使用 field collapsing.
我假设 user
的类型是 keyword
而 month
的类型在索引映射中是 date
。像这样的查询应该适合您。您还可以使用 size
和 from
参数进行分页。
{
"from": 0,
"size": 1,
"sort": [
{
"month": {
"order": "desc"
}
}
],
"collapse": {
"field": "user"
}
}
我的平面数据是这样的:
[
{
user: "User1",
fullName: "George Mann",
moneyUsed: 12.0,
month: "2022-01-31"
},
{
user: "User1",
fullName: "George Man",
moneyUsed: 13.0,
month: "2022-02-28"
},
{
user: "User1",
fullName: "George Man",
moneyUsed: 14.0,
month: "2022-03-31"
},
{
user: "User2",
fullName: "Mary Mann",
moneyUsed: 17.0,
month: "2022-01-31"
}
]
这种类型的结构使我可以轻松地对用户花费的金额进行汇总,因为每个用户的每个月都是单独存储的。 我遇到的问题是当我尝试在用户 table(用户,全名)中显示所有唯一用户时。 例如,如果我有 100 个唯一用户,我不确定向他们展示考虑排序和分页的最佳方法是什么。
我正在考虑为每个用户的最近一个月添加一个新字段“mostRecent”。通过这种方式,我可以轻松地为每个用户识别 ES 中的最新条目。
实现此方案的最佳方法是什么?
您可以使用 field collapsing.
我假设 user
的类型是 keyword
而 month
的类型在索引映射中是 date
。像这样的查询应该适合您。您还可以使用 size
和 from
参数进行分页。
{
"from": 0,
"size": 1,
"sort": [
{
"month": {
"order": "desc"
}
}
],
"collapse": {
"field": "user"
}
}