агрегирование эластичного поиска по объекту или паре ключ-значение - PullRequest
0 голосов
/ 10 октября 2019

у меня есть такие документы

document-1

{
  "edges" :[
    {
      "start" : "abc", 
      "end" : "def"
    },
    {
      "start" : "bbb", 
      "end" : "ccc"
    },
    {
      "start" : "xyz", 
      "end" : "aaa"
    }
  ]
}

document-2

{
  "edges" :[
    {
      "start" : "abc", 
      "end" : "def"
    },
    {
      "start" : "bbb", 
      "end" : "ccc"
    }
  ]
}

Я хочу получить уникальные комбинации start и end. то есть, следующим образом

{
  "buckets": [
    {
      "key": {
        "start": "abc",
        "end": "def"
      },
      "doc_count": 2
    },
    {
      "key": {
        "start": "bbb",
        "end": "ccc"
      },
      "doc_count": 2
    },
    {
      "key": {
        "start": "xyz",
        "end": "aaa"
      },
      "doc_count": 1
    }
  ]
}

Я пытался агрегировать термины в поле start и end. но не получил ожидаемый результат.

1 Ответ

1 голос
/ 10 октября 2019

Вам нужно будет работать с типом данных nested, так как массивы сглаживаются, как это очень хорошо описано в документах . Это причина, по которой вы не можете получить ожидаемые результаты, так как связь между key и value потеряна. Кроме того, вам нужно будет добавить вложенную агрегацию в edges, где вы сможете применить terms агрегации. Иерархия агрегаций должна выглядеть следующим образом:

nested: edge
    terms: key
        terms: value

Исходя из этого, вы можете затем получить ожидаемые результаты, комбинируя результаты терминов агрегации.

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