最近、ブロックチェーンブラウザで作業していたとき、elasticsearchのdocument_idとしてblockNumberを使用していましたが、クエリ操作を行う必要があったので、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 フィールドと同等の数値を含む別の数値フィールドをドキュメント内に作成し、その数値フィールドで並べ替える必要があります。