elasticsearch按文档id排序

Imr*_*med 5 elasticsearch

我在elasticsearch中有一个简单的索引,我的所有id都是手动添加的,即我不添加带有自动字符串id的文档。

现在的需求是逐页获取所有文档的列表,并按文档id(即_id)排序

当我用 _id 尝试这个时,它不起作用。然后我在论坛上查找它并发现我必须使用 _uid 来实现这一点。这确实有效,尽管我不知道如何。但另一个问题是排序就像 _id 是字符串一样完成。它实际上是一个字符串。但我希望结果就像 _id 是一个数字一样。

所以这里有两个问题:

  1. 为什么排序不适用于 _id 而适用于 _uid

  2. 有没有办法将文档ID排序为数字而不是整数

例如,如果我的文档 ID 是1, 2, 3, ..... ,55

我按以下顺序得到结果:

1101112, ... ,19220, ... 很快

虽然我想按以下顺序获得结果:

123, ... 很快

非常感谢任何帮助!

And*_*fan 4

_id索引:

{
  "mappings": {
    "some_type": {
      "_id": {
        "index": "not_analyzed"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

并使用脚本:

{
  "sort": {
    "_script": {
      "type": "number",
      "script": "doc['_id'].value?.isInteger()?doc['_id'].value.toFloat():null",
      "order": "asc"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

尽管我强烈建议,如果可能的话,将 id 更改为integer包含string数字。

我有点怀疑它是否有效,_uid因为_uid它是 type 和 id 之间的组合。