Как определить запрос вложенных json объектов / полей в elasti c search? - PullRequest
1 голос
/ 10 апреля 2020

Я делаю агрегацию терминов на основе поля [тип], как показано ниже, но elasti c возвращает только 1 счетчик термов вместо 2, он не выполняет агрегацию вложенных объектов, то есть в comments.data.comments [это список] в это у меня 2 типа.

{
    "aggs": {
        "genres": {
            "terms": {
                "field": "comments.data.comments.type"
            }
        }
    }
}

1 Ответ

1 голос
/ 10 апреля 2020

Должен использовать тип поля nested:

PUT events
{
  "mappings": {
    "properties": {
      "events": {
        "type": "nested",
        "properties": {
          "ecommerceData": {
            "type": "nested",
            "properties": {
              "comments": {
                "type": "nested",
                "properties": {
                  "recommendationType": {
                    "type": "keyword"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

POST events/_doc
{
  "events": [
    {
      "eventId": "1",
      "ecommerceData": [
        {
          "comments": [
            {
              "rank": 1,
              "recommendationType": "abc"
            },
            {
              "rank": 1,
              "recommendationType": "abc"
            }
          ]
        }
      ]
    }
  ]
}

GET events/_search
{
  "size": 0,
  "aggs": {
    "genres": {
      "nested": {
        "path": "events.ecommerceData.comments"
      },
      "aggs": {
        "nested_comments_recomms": {
          "terms": {
            "field": "events.ecommerceData.comments.recommendationType"
          }
        }
      }
    }
  }
}
...