最近做区块链浏览器,我把blockNumber作为了elasticsearch的文档_id,需要做一个查询操作,换成mysql查询就是
SELECT MAX(`_id`) FROM `block`;
对应的Kibana中的查询
GET /block/_search
{
"query": {
"bool": {
"must": [
{"match": {
"transactionHandled": true
}}
]
}
},
"sort": [
{
"_id": {
"order": "desc"
}
}
]
}
查询的结果永远都是"_id"为"99"的文档排第一个,这明显不符合我的预期。通过查询资料,得到如下解决方案
原因是您的ID是字符串,并且字符串按字典顺序(而不是数字顺序)排序,因此在字符串世界9999> 1000000中。
您应该做的是在文档中创建另一个数字字段,其中包含与ID字段等效的数字,并按该数字字段排序。