ElasticSearch: получить все объекты верхнего уровня с совпадающим innerObject - PullRequest
0 голосов
/ 17 февраля 2020

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

Также для сопоставления дочерние объекты имеют тип вложенного

Пример набора данных :

{
  "type": "EVENT_TYPE",
  "name": "American Football",
  "id": "6423",
  "children": [
    {
      "type": "EVENT",
      "name": "NFL Season 2020/21",
      "id": "29678534",
      "countryCode": "GB",
      "children": [
        {
          "type": "EVENT",
          "name": "Super Bowl LV",
          "id": "29678547",
          "countryCode": "GB",
          "children": [
            {
              "type": "MARKET",
              "name": "Super Bowl Winner",
              "id": "1.168283812",
              "exchangeId": "1",
              "marketType": "TOURNAMENT_WINNER",
              "marketStartTime": "2021-02-07T22:30:00.000Z",
              "numberOfWinners": 1
            }
          ]
        },
        {
          "type": "MARKET",
          "name": "NFL Regular Season MVP 2020/21",
          "id": "1.168480742",
          "exchangeId": "1",
          "marketType": "SEASON_SPECIALS",
          "marketStartTime": "2020-09-11T00:20:00.000Z",
          "numberOfWinners": 1
        }
      ]
    },
    {
      "type": "EVENT",
      "name": "XFL Championship",
      "id": "29673692",
      "countryCode": "GB",
      "children": [
        {
          "type": "MARKET",
          "name": "Winner",
          "id": "1.168353251",
          "exchangeId": "1",
          "marketType": "TOURNAMENT_WINNER",
          "marketStartTime": "2020-02-08T19:00:00.000Z",
          "numberOfWinners": 1
        }
      ]
    }
  ]

Я пробовал следующий запрос:

{
    "_source" : ["name", "id", "children.name", "children.children.name"],
    "query":{
    "nested": {

        "path":"children.children.children",
        "inner_hits": {  },
        "query":{
            "bool":{
                "must":{
                    "match":{
                        "children.children.children.id":"1.168283812"

                    }
                }

            }
        }
    }
    }
}

Ожидаемый ответ

name: "American Football"
"id":6423
children.name:"NFL Season 2020/21"
children.children.name:"Super Bowl LV"
  "_source": {
              "type": "MARKET",
              "name": "Super Bowl Winner",
              "id": "1.168283812",
              "exchangeId": "1",
              "marketType": "TOURNAMENT_WINNER",
              "marketStartTime": "2021-02-07T22:30:00.000Z",
              "numberOfWinners": 1
            }

Фактический ответ: он дает все объекты верхнего уровня

name: "American Football"
"id":6423
children.name:["NFL Season 2020/21", "XFL Championship"]
children.children.name:["Super Bowl LV", "NFL Regular Season MVP 2020/21"]
  "_source": {
              "type": "MARKET",
              "name": "Super Bowl Winner",
              "id": "1.168283812",
              "exchangeId": "1",
              "marketType": "TOURNAMENT_WINNER",
              "marketStartTime": "2021-02-07T22:30:00.000Z",
              "numberOfWinners": 1
            }

Я хочу получить только соответствующий объект верхнего уровня вместо массива всех объектов верхнего уровня с соответствующим внутренним объектом.

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