Как я могу написать запрос для объединения или группировки документов на основе условия в едином индексе в Elasticsearch? - PullRequest
0 голосов
/ 18 июня 2020

Образец структуры документа

{
    "local_ip": "10.10.26.23",
    "local_port": 55243,
    "direction": 1,
    "remote_ip": "192.229.232.240",
    "remote_port": 80
}
{
    "local_ip": "10.10.26.24",
    "local_port": 55243,
    "direction": 2,
    "remote_ip": "10.10.26.23",
    "remote_port": 55243
}
{
  "local_ip": "10.10.26.25",
  "local_port": 8080,
  "direction": 1,
  "remote_ip": "192.229.22.21",
  "remote_port": 80
}
{
  "local_ip": "10.10.26.27",
  "local_port": 55248,
  "direction": 2,
  "remote_ip": "10.10.26.25",
  "remote_port": 8080
}

У меня есть 3 условия, основанные на том, что я хочу сгруппировать эти документы с одним индексом

  1. local_ip == remote_ip других документов
  2. local_port == remote_port других документов
  3. направление первого документа 1 и других документов должно иметь значение 2

Результат должен быть

{
  "0": [
    {
      "local_ip": "10.10.26.23",
      "local_port": 55243,
      "direction": 1,
      "remote_ip": "192.229.232.240",
      "remote_port": 80
    },
    {
      "local_ip": "10.10.26.24",
      "local_port": 55243,
      "direction": 2,
      "remote_ip": "10.10.26.23",
      "remote_port": 55243
    }
  ],
  "1": [
    {
      "local_ip": "10.10.26.25",
      "local_port": 8080,
      "direction": 1,
      "remote_ip": "192.229.22.21",
      "remote_port": 80
    },
    {
      "local_ip": "10.10.26.27",
      "local_port": 55248,
      "direction": 2,
      "remote_ip": "10.10.26.25",
      "remote_port": 8080
    }
  ]
}
...