Трубопроводные агрегаты в Elasticsearch - PullRequest
0 голосов
/ 25 февраля 2019

Я работаю над Elasticsearch Aggregation, и у меня есть вопрос относительно того, как выполнить конвейерную агрегацию.У меня есть три высокоуровневых поля в моем документе ES:

documentId, list1, list2

Пример: у меня есть пара документов:

документ 1:

{
  "documentId":"1",
  "list1": 
  [
    {
      "key": "key1",
      "value": "value11"
    }
  ],
  "list2": 
  [
    {
      "key": "key2",
      "value": "value21"
    }
...
  ]
}

документ 2:

{
  "documentId":"2",
  "list1": 
  [
    {
      "key": "key1",
      "value": "value11"
    }
  ],
  "list2": 
  [
    {
      "key": "key2",
      "value": "value21"
    }
...
  ]
}

документ 3:

{
  "documentId":"3",
  "list1": 
  [
    {
      "key": "key1",
      "value": "value12"
    }
  ],
  "list2": 
  [
    {
      "key": "key2",
      "value": "value21"
    }
...
  ]
}

Подводя итог -

document1 и document2 имеют одинаковый набор значений для ключа1 иkey2 (за исключением того, что id отличается, поэтому они рассматриваются как два отдельных документа).

document3 имеет то же значение для key2, что и в document1 и document2.Значение для key1 отличается от document1 и document2.

Я хочу запустить агрегатор терминов для ключей поля list1, который должен использоваться в качестве входных данных для агрегирования терминов, сделанного для list2.

Итак, для вышеупомянутогоНапример, общий вывод, который я хочу - это значение 21: 2 (один счет, соответствующий значению 11 в ключе 1, и второй счет, соответствующий значению 12 в ключе 1)

и НЕ значение 21: 3 (два счета соответствуют значению 11 в ключе 1 и третьемколичество, соответствующее значению 12 в key1).

Есть ли простой способ сделать это?

...