我在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
,...等等
非常感谢任何帮助!
答案 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的组合。