我在 elasticsearch 中有一个简单的索引,我所有的 id 都是手动添加的,即我不添加带有自动字符串 id 的文档。
现在的需求是逐页获取所有文档的列表,并按文档id(即_id)排序
当我尝试使用 _id 时,它不起作用。然后我在论坛上寻找它,发现我必须为此使用 _uid。这实际上有效,虽然我不知道如何。但另一个问题是排序就像 _id 是字符串一样完成。它实际上是一个字符串。但我希望结果就像 _id 是一个数字一样。
所以这里有两个问题:
为什么排序不适用于 _id 而它却适用于 _uid
有没有办法让文档 ID 按数字而不是整数排序
例如如果我的文档 ID 是 1
、2
、3
、.....、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/