ElasticSearch - связывает или связывает результаты одного ответа с другим, используя msearch - PullRequest
0 голосов
/ 20 марта 2020

С пандемией c COVID19, скрывающейся вокруг, надеюсь, что все вы, ребята, в порядке

Просто быстрый вопрос, в прошлом году мне были поставлены определенные конечные точки, которые требуют запросов Elasticsearch. Сейчас я нахожусь в части оптимизации, и именно так я наткнулся на Multi Search API или широко известный как msearch .

Теперь с идеей msearch , я думал, что смогу уменьшить количество запросов, которые я выполняю на наших серверах ES. Раньше я делал 2 поисковых запроса, и теперь моя цель - сделать 1 запрос msearch, чтобы облегчить время загрузки конечных точек.

Есть ли способ для первого ответа aggs: msearch иметь отношение к следующим скоплениям? Я имею в виду, есть ли у меня способ связать или получить ответ первых агг в msearch, а затем передать его следующим агрегациям во время выполнения?

Пример сценария:

ПЕРВЫЕ AGGS

Я получаю МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ определенного поля

"aggs" => [
    'MAX_SVALUE' => [
        'max' => [
            'field' => 'latest.soc_mm_score'
        ]
    ],
]

ВТОРОЕ AGGS

Использование max значение выше

Обратите внимание, что $ mxs здесь, это массив на основе PHP, он содержит максимальные значения из FIRST AGGS

"aggs" => [
    "SVALUE" => [
        "terms" => [
            "script" => [
                "source"=>"
                    double temp = Double.parseDouble((((doc['latest.soc_mm_score'].value * 10) / ".$mxs[$platforms[$p]].").toString()));
                    return temp;
                ",
                "lang"=>"painless"
            ],
            "size"=> 10000
        ]
    ]
]

Заранее благодарю за помощь!

1 Ответ

0 голосов
/ 20 марта 2020

Идея _msearch состоит в том, чтобы либо разделить интенсивные поиски, либо запросить различные комбинации индексов в одном go

{ "index": "INDEX_NAME_1", "type": "TYPE_NAME_1" }
{ "query": { "match_all": {}}}
{ "index": "INDEX_NAME_2", "type": "TYPE_NAME_2" }
{ "query": { "match_all": {}}}

Теперь эти поиски имеют разные контексты и, прямо говоря, " не знаю друг о друге ". Так что нет, вы не можете использовать результат одного внутри следующего во время выполнения.

Вам нужно будет выполнить первый запрос, получить максимум и затем запустить другое агрегирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...