Elasticsearch - умножить значение поля внутри вложенной области на значение снаружи, в агрегации - PullRequest
0 голосов
/ 14 ноября 2018

Допустим, у меня есть такое отображение:

{
"mappings": {
    "sources": {
        "dynamic": "false",
        "properties": {
            "docId": {
                "type": "integer"
            },
            "length": {
                "type": "integer"
            },
            "sources": {
                "type": "nested",
                "properties": {
                    "url": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword"
                            }
                        }
                    },
                    "domain": {
                        "type": "keyword"
                    },
                    "percent": {
                        "type": "half_float"
                    },
                    "author": {
                        "type": "text"
                    },
                    "year": {
                        "type": "short"
                    }
                }
            }
        }
    }
},
"settings": {
    "index": {
        "codec": "best_compression"
    }
}

Sources - это массив объектов.я хочу запустить агрегацию, которая находит минимальное значение для каждого домена в процентах, умноженное на длину документов.Мой запрос выглядит следующим образом:

    GET /_search
{
    "aggs": {
        "sources": {
            "nested": {
                "path": "sources"
            },
            "aggs": {
                "domains": {
                    "terms": {
                        "field": "sources.domain"
                    },
                    "aggs": {
                        "min_percent": {
                            "min": {
                              "script":{
                                "lang": "painless",
                                "inline": "doc['sources.percent'].value * source['length'].value"
                              }
                            }
                        }
                    }
                }
            }
        }
    }
}

Но для каждого домена он возвращает 0, поскольку он не может получить доступ к значению «длина» вне вложенной области видимости.Я читал о reverse_nested, но я не вижу, как я могу использовать его здесь.Я знаю, что могу сразу же сохранить результат умножения, а не вычислять его в запросе, но мне просто стало любопытно, можно ли получить доступ к значениям вне вложенной области видимости в скрипте.Есть ли у вас какие-либо предложения, и возможно ли это вообще?

...