elasticsearch 按文档 id 排序

标签 elasticsearch

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

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

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

所以这里有两个问题:

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

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

例如如果我的文档 ID 是 123、.....、55

我按以下顺序得到结果:

1, 10, 11, 12, ..., 19 >, 2, 20, ...等等

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

1, 2, 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 是类型和 id 的组合。

关于elasticsearch 按文档 id 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32653235/

相关文章:

json - Logstash:处理大消息

python-2.7 - 无法在Elasticsearch中建立索引

elasticsearch 可下载手册

elasticsearch - 如何使用MultiTermVectorsAsync

java - ElasticSearch 只返回具有不同值的文档

elasticsearch - 在 Elasticsearch 中使用带有bool的query_string查询导致解析异常

json - 弹性query_string返回不需要的值

python - 如何使用python在Elasticsearch索引中存储键值对

scala - 从Scala中的 Elasticsearch 检索数据/值

docker - 我的Docker无法再使用Elasticsearch