弹性搜索平面索引结构

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 的类型是 keywordmonth 的类型在索引映射中是 date。像这样的查询应该适合您。您还可以使用 sizefrom 参数进行分页。

{
  "from": 0,
  "size": 1, 
  "sort": [
    {
      "month": { 
        "order": "desc"
      }
    }
  ],
  "collapse": {
    "field": "user"
  }
}