微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

解决方法

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

返回正确的结果。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。