【发布时间】:2026-01-30 18:45:02
【问题描述】:
我有索引 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
"hits": [
{
"_index": "contracts",
"_type": "_doc",
"_id": "9999",
"_score": null,
"_source": {
"contractNumber": "2000/290/990990"
},
"sort": [
"9999"
]
}
]
当我使用查询执行搜索时:
{
"size": 10000
}
实际结果处于正确状态,我所有超过 9999 的 ID 都存在并由
选择contracts/_doc/10005
返回正确的结果。
请告诉我如何解决这种情况
【问题讨论】:
-
原因是您的 ID 是字符串,并且字符串按字典顺序排序,而不是按数字排序,因此在字符串世界中 9999 > 1000000。您应该做的是在文档中添加另一个数字字段,其中包含您的 ID 字段的数字等效项并按该数字字段排序
-
@Val 是的,你的建议很有效,谢谢。发表你的答案,我会批准它
标签: elasticsearch