elasticsearch按文档ID排序

时间:2015-09-18 13:26:34

标签: elasticsearch

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

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

当我用_id尝试这个时,它没有用。然后我在论坛上找了它,发现了很多,我必须使用_uid。这实际上有效,虽然我不知道如何。但另一个问题是排序完成就像_id是字符串一样。它实际上是一个字符串。但我希望结果好像_id是一个数字。

所以这里有两个问题:

  1. 为什么排序不适用于_id并且它适用于_uid

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

  3. 例如如果我的文档ID为123,.....,55

    我按此顺序获得结果:

    1101112,...,19220 ,. ..等等

    虽然我想按此顺序得到结果:

    123,...等等

    非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

_id编入索引:

{
  "mappings": {
    "some_type": {
      "_id": {
        "index": "not_analyzed"
      }
    }
  }
}

并使用脚本:

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

即使我强烈建议,如果可能,请将ID更改为integer,而不是将其设为string并包含数字。

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