Elasticsearch:最后按具有空值的字段排序

Elasticsearch: sort by field with null values last

我想按 name 排序,但在结果末尾保留包含空值或缺少 price 数据的条目。

我试过:

sort: {
    sorting.name: {
        order: "asc"
    },
    prices.minprice.price: {
        missing: "_last"
    }
}

但这仅按名称排序。

为此,我们可以使用自定义函数分数 (which is faster than custom script based sorting according to elasticsearch documentation)。当缺少价格时,数值将 return 0.

然后我们先按分数排序,分成缺少价格数据的部分和没有缺少价格数据的部分,然后根据名称对这两个部分中的每一个进行排序。

{
    "query": {
        "function_score": {
            "boost_mode": "replace",
            "query": {"match_all": {}},
            "script_score": {
                "script": "doc['price'].value == 0 ? 0 : 1"
            }   
        }
    },
    "sort": [
       "_score",
       "name"
    ]
}

这对我有用,

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html#_script_based_sorting

"sort":[
      {
         "_script":{
            "type":"number",
            "script":{
               "lang":"painless",
               "source":"return params._source.store[0].sku_available_unit == 0 ? 0 : 1;"
            },
            "order":"desc"
         }
      }
    ]

实际上你可以使用 missing 命令。

https://www.elastic.co/guide/en/elasticsearch/reference/current/sort-search-results.html#_missing_values