Elasticsearch排序,用另一个替换缺失的字段

时间:2019-05-20 13:51:37

标签: php elasticsearch

我有一些我想按价格排序的产品。它们具有两个属性,product_price和一个special_price

special_price并不总是出现在文档中。阅读文档后,您似乎可以添加missing元素,并在该元素上进行搜索。

我已将以下内容添加到请求中:

"sort" : [
        { "special_price" : {"missing" : "product_price"} },
],

文档状态:

  

missing参数指定缺少字段的文档   应该处理:缺少的值可以设置为_last,_first或a   自定义值(将用于缺少文档的排序值)。

我还尝试将后备值指定为

"sort" : [
        { "special_price" : {"missing" : "doc['product_price'].value"} },
],

我看不到我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

missing支持三个值_last,_first或自定义值(一个数字)。您不能将其他字段指定为missing参数的值。由于您希望回退到其他字段的值,因此可以使用script based sorting

因此排序可以定义为:

{
  "sort": {
    "_script": {
      "type": "number",
      "script": {
        "lang": "painless",
        "source": "if(doc['special_price'].size() != 0) { return doc['special_price'].value; } return doc['product_price'].value;"
      },
      "order": "desc"
    }
  }
}