当我通过降序搜索

时间:2018-08-14 08:18:58

标签: 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

返回正确的结果。

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

1 个答案:

答案 0 :(得分:3)

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

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