我有索引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
}
实际结果处于正确状态,我所有的ID都超过了9999,并通过
选择contracts/_doc/10005
返回正确的结果。
请告知我如何解决这种情况
答案 0 :(得分:3)
原因是您的ID是字符串,并且字符串是按字典顺序而不是数字排序,因此在字符串世界9999> 1000000中。
您应该做的是在文档中包含另一个与ID字段等效的数字字段,并按该数字字段排序。