一尘不染

当我按降序搜索ID时,ElasticSearch返回的ID不为最大

elasticsearch

我有索引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

返回正确的结果。

请告知我如何解决这种情况


阅读 426

收藏
2020-06-22

共1个答案

一尘不染

原因是您的ID是字符串,并且字符串是按字典顺序而不是数字顺序排序的,因此在字符串世界9999> 1000000中。

您应该做的是在文档中包含另一个与ID字段等效的数字字段,并按该数字字段排序。

2020-06-22