ElasticSearch: количество вложенных элементов в результатах поиска - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть следующее сопоставление:

{
  "test_index" : {
    "mappings" : {
      "test_type" : {
        "properties" : {
          "field1" : {
            "type" : "string"
          },
          "field2" : {
            "type" : "string"
          },
          "items" : {
            "type" : "nested",
            "properties" : {
              "nested_field1" : {
                "type" : "string"
              },
              "nested_field2" : {
                "type" : "string"
              }            
            }
          }
        }
      }
    }
  }
}

С результатами поиска я хочу получить общее количество вложенных элементов в структуре результатов:

{
  "hits": {
    "total": 2,
    "max_score": 1.0,
    "hits": [
      {
        "_index": "test_index",
        "_type": "test_type",
        "_id": "AWfAc79wljtimCd5JZlJ",
        "_score": 1.0,
        "_source": {
          "field1": "Some string 1",
          "field2": "Some string 2",
          "items": [
            {
              "nested_field1": "Some val1",
              "nested_field2": "Some val2"
            }
          ],
          "totalItems": 1
        }
      },
      {
        "_index": "test_index",
        "_type": "test_type",
        "_id": "AZxfc79dtrt878xx",
        "_score": 1.0,
        "_source": {
          "field1": "Some string 3",
          "field2": "Some string 4",
          "items": [
            {
              "nested_field1": "Some val3",
              "nested_field2": "Some val4"
            },
            {
              "nested_field1": "Some val5",
              "nested_field2": "Some val6"
            }
          ],
          "totalItems": 2
        }
      }
    ]
  }
}

Можно ли добиться этого с помощью агрегатов?

1 Ответ

0 голосов
/ 18 декабря 2018

Поскольку у вас есть прекрасная идея также сохранить поле totalItems на корневом уровне, вы можете просто суммировать это поле и получить количество вложенных элементов:

{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "total_items": {
      "sum": {
        "field": "totalItems"
      }
    }
  }
}
...