我有索引URI
contracts/_doc/
我将文件推送到此处,ID由SQL-DB预生成
这是来自JAVA客户端的代码示例:
final BulkRequest request = new BulkRequest(); contracts.forEach(e -> request.add(new IndexRequest(CONTRACT_INDEX, CONTRACT_INDEX_TYPE, String.valueOf(e.getId())) .source("contractNumber", e.getContractNumber()) ) );
有时我需要查看索引中ID的最大值,然后发送此查询
{ "sort" : [ { "_id" : {"order" : "desc"}} ], "size": 1 }
问题在于,ElasticSearch始终返回的值不超过 9999
9999
"hits": [ { "_index": "contracts", "_type": "_doc", "_id": "9999", "_score": null, "_source": { "contractNumber": "2000/290/990990" }, "sort": [ "9999" ] } ]
当我执行查询查询时:
{ "size": 10000
}
实际结果处于正确状态,我所有的ID都超过了9999,并按
contracts/_doc/10005
返回正确的结果。
请告知我如何解决这种情况
原因是您的ID是字符串,并且字符串是按字典顺序而不是数字顺序排序的,因此在字符串世界9999> 1000000中。
您应该做的是在文档中包含另一个与ID字段等效的数字字段,并按该数字字段排序。