繁体   English   中英

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

[英]Elasticsearch sort, substitute a missing field with another

我有一些产品想按价格排序。 它们有两个属性, product_pricespecial_price

special_price并不总是出现在文档中。 在阅读文档时,您似乎可以添加一个missing元素并让它搜索这个元素。

我在请求中添加了以下内容:

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

文档状态:

缺失参数指定应如何处理缺失字段的文档:缺失值可以设置为 _last、_first 或自定义值(将用于缺失文档作为排序值)。

我还尝试将回退值指定为

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

我看不到这里缺少什么?

missing支持三个值 _last、_first 或自定义值(一个数字)。 您不能指定其他字段作为missing参数的值。 由于您想回退到不同字段的值,因此您可以使用基于脚本的排序

所以排序可以定义为:

{
  "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"
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM