首页 > 解决方案 > 如何根据匹配条件的嵌套对象的大小对弹性搜索查询进行排序?

问题描述

我尝试根据匹配条件的嵌套对象的大小(此处为具有特定状态的助推器的大小)对弹性搜索查询进行排序

这是我的映射:

{
  "companies" : {
    "mappings" : {
      "dynamic" : "false",
      "properties" : {
        "authorization_level" : { "type" : "keyword" },
        "boosters" : {
          "type" : "nested",
          "properties" : {
            "id" : { "type" : "keyword" },
            "status" : { "type" : "keyword" } //condition is on this specific field
          }
        },
        /// More properties not relevant here
      }
    }
  }
}

如果我简化我的查询以只保留排序部分,我有这个:

GET companies/_search
{ 
  "sort": [
    { "authorization_level": { "order": "asc" } },
    { "_script": 
      { 
        "script": "params['_source']['boosters'].size()", 
        "order": "desc", 
        "type": "number" 
      } 
    }
  ]
}

脚本部分可以很好地按嵌套字段的大小对公司进行排序boosters。但现在我想按具有特定状态的助推器的大小对其进行排序(例如:助推器可以有 2 个不同的状态已完成待处理我只想计算待处理的助推器)。

你知道如何编写脚本部分来实现这一点吗?无痛的脚本语言对我来说根本不是无痛的......

非常感谢

标签: elasticsearchelasticsearch-painless

解决方案


推荐阅读