Skip to content

Latest commit

 

History

History
170 lines (155 loc) · 2.47 KB

nested_aggs_vs_denormalised.md

File metadata and controls

170 lines (155 loc) · 2.47 KB

nested aggs vs denormalised

description

convert a nested index to a denormalised index

################################### clean up ###################################

DELETE /index_nested
DELETE /index_denormalised

################################################################################

PUT /index_nested
{
  "mappings": {
    "properties": {
      "parent_id": {
        "type": "keyword"
      },
      "childSkus": {
        "type": "nested",
        "properties": {
          "price": {
            "type": "integer"
          },
          "colour": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

POST /index_nested/_doc
{
  "parent_id": "1234",
  "childSkus": [
    {
      "price": 1234,
      "colour": "red"
    },
    {
      "price": 321,
      "colour": "blue"
    }
  ]
}

POST /index_nested/_doc
{
  "parent_id": "456",
  "childSkus": [
    {
      "price": 654,
      "colour": "grey"
    },
    {
      "price": 678,
      "colour": "orange"
    }
  ]
}

GET /index_nested/_search
{
  "size": 0, 
  "aggs": {
    "NAME": {
      "terms": {
        "field": "parent_id",
        "size": 10
      },
      "aggs": {
        "avg_price": {
          "nested": {
            "path": "childSkus"
          },
          "aggs": {
            "NAME": {
              "avg": {
                "field": "childSkus.price"
              }
            }
          }
        }
      }
    }
  }
}

PUT /index_denormalised
{
  "mappings": {
    "properties": {
      "parent_id": {
        "type": "keyword"
      },
      "childSku": {
        "properties": {
          "price": {
            "type": "integer"
          },
          "colour": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

POST /index_denormalised/_doc
{
  "parent_id": "1234",
  "childSku": {
    "price": 1234,
    "colour": "red"
  }
}

POST /index_denormalised/_doc
{
  "parent_id": "1234",
  "childSku": {
    "price": 321,
    "colour": "blue"
  }
}

POST /index_denormalised/_doc
{
  "parent_id": "456",
  "childSku": {
    "price": 654,
    "colour": "grey"
  }
}

POST /index_denormalised/_doc
{
  "parent_id": "456",
  "childSku": {
    "price": 678,
    "colour": "orange"
  }
}

GET /index_denormalised/_search
{
  "size": 0,
  "aggs": {
    "NAME": {
      "terms": {
        "field": "parent_id",
        "size": 10
      },
      "aggs": {
        "NAME": {
          "avg": {
            "field": "childSku.price"
          }
        }
      }
    }
  }
}