Elasticsearchで_id順にソートされた最大値が取得できない問題を解決

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

おすすめ

転載: blog.csdn.net/HardRedStone/article/details/119919336