elasticsearch,Php,elasticsearch" /> elasticsearch,Php,elasticsearch" />

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

Php Elasticsearch排序,用另一个字段替换缺少的字段,php,elasticsearch,Php,elasticsearch,我有一些产品想按价格分类。他们有两个属性,产品价格和特殊价格 特殊价格并不总是出现在单据中。在阅读文档时,您可以添加一个缺少的元素,并让它对此进行搜索 我在请求中添加了以下内容: "sort" : [ { "special_price" : {"missing" : "product_price"} }, ], 文件规定: missing参数指定缺少该字段的文档的方式 应处理:缺少的值可以设置为_last、_first或a 将用于缺少文档的自定义值作为排序值 我还尝试将回退值指

我有一些产品想按价格分类。他们有两个属性,产品价格和特殊价格

特殊价格并不总是出现在单据中。在阅读文档时,您可以添加一个缺少的元素,并让它对此进行搜索

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

"sort" : [
        { "special_price" : {"missing" : "product_price"} },
],
文件规定:

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

我还尝试将回退值指定为

"sort" : [
        { "special_price" : {"missing" : "doc['product_price'].value"} },
],
我看不出这里缺少了什么?

缺少支持三个值,即最后一个值、第一个值或一个自定义值和一个数字。不能将其他字段指定为缺少参数的值。由于您希望回退到不同字段的值,因此可以使用

因此,排序可以定义为:

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

为了解决这个问题,我在文档中添加了一个名为“sale_price”的新字段。然而,这并不理想。如果有人能提供更好的解决方案,我将不胜感激。谢谢。这解决了我的问题。在测试中,脚本排序似乎需要一些时间。为了实现我设定的目标,我坚持使用额外的字段排序。