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 に答える