0

我正在尝试通过将根文档中的数字字段与嵌套文档中的字段组合来对 ES 文档进行排序。为简单起见,假设我想对doc['score'] + doc['nested.score'].

示例映射和几个数据文档在这里: http: //pastebin.com/9sdMphsR

由于它尝试doc['score']直接访问,因此一种幼稚(且错误)的方法是:

POST /testing/stuff/_search
{
    "query": {
        "match_all": {
        }
    },
    "sort": {
        "_script": {
            "type": "number",
            "mode": "max",
            "script": {
                "inline": "doc['score'].value + doc['variations.score'].value",
                "lang": "expression"
            },
            "order": "desc",
            "nested_path": "variations"
        }
    }
}

这样做的正确方法是什么?我意识到我可以将根级别复制score到每个嵌套文档中,但如果我可以避免这样做,我更愿意这样做。

4

1 回答 1

0
POST /testing/stuff/_search
{
  "query": {
    "match_all": {}
  },
  "sort": {
    "_script": {
      "type": "number",
      "script": {
        "inline": "def max=java.lang.Integer.MIN_VALUE; for(obj in doc['variations.score']){ if (obj > max) max = obj; }; return doc['score'].value + max",
        "lang": "groovy"
      },
      "order": "desc"
    }
  }
}

并且该variations字段需要让"include_in_parent": true脚本能够访问嵌套值。

于 2016-04-14T06:35:22.017 回答