Elasticsearch:按字段排序,最后为空值

arn*_*der 7 elasticsearch

我想要排序name,但price在结果的末尾保留带有空或缺少数据的条目.

我试过了:

sort: {
    sorting.name: {
        order: "asc"
    },
    prices.minprice.price: {
        missing: "_last"
    }
}
Run Code Online (Sandbox Code Playgroud)

但这只是按名称排序.

dpe*_*ock 5

为此,我们可以使用自定义功能评分(比Elasticsearch文档中基于自定义脚本的排序要快)。如果缺少价格,则数值将返回0。

然后,我们首先对得分进行排序,以将其分为价格数据缺失的部分和价格数据缺失的部分,然后根据名称对这两部分进行分类。

{
    "query": {
        "function_score": {
            "boost_mode": "replace",
            "query": {"match_all": {}},
            "script_score": {
                "script": "doc['price'].value == 0 ? 0 : 1"
            }   
        }
    },
    "sort": [
       "_score",
       "name"
    ]
}
Run Code Online (Sandbox Code Playgroud)