CaShiS
CaShiS

Reputation: 235

Max and min from all index in query

Is there way to get max and min for all documents in index, not only max and min from category "game" without making another request to elastic?

{
"query": {
    "bool": {
        "must": [
            {
                "match": {
                    "category": "game"
                }
            }
        ]
    }
},
"aggs": {
    "maxPoints": {
        "max": {
            "field": "points"
        }
    },
    "minPoints": {
        "min": {
            "field": "points"
        }
    }
}

Here is some data data i have, with query above I want to get this 2 docs from category game and min 0, max 100 instead of min 10, max 20.

[
  {
    "id": 1,
    "category": "offer",
    "points": 0
  },
  {
    "id": 2,
    "category": "game",
    "points": 10
  },
  {
    "id": 3,
    "category": "game",
    "points": 20
  },
  {
    "id": 4,
    "category": "offer",
    "points": 100
  }
]

Upvotes: 1

Views: 1209

Answers (1)

Amit
Amit

Reputation: 32386

Yeah, just remove the match clause, and add match_all query to include all the documents in your index. Use post_filter to get the expected results in a single ES call.

{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "maxPoints": {
      "max": {
        "field": "points"
      }
    },
    "minPoints": {
      "min": {
        "field": "points"
      }
    }
  },
  "post_filter": { // Note this 
    "term": {
      "category": "game"
    }
  }
}

Output

{
  "took": 8,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 2,
      "relation": "eq"
    },
    "max_score": 1.0,
    "hits": [
      {
        "_index": "65406564",
        "_type": "_doc",
        "_id": "2",
        "_score": 1.0,
        "_source": {
          "id": 2,
          "category": "game",
          "points": 10
        }
      },
      {
        "_index": "65406564",
        "_type": "_doc",
        "_id": "3",
        "_score": 1.0,
        "_source": {
          "id": 3,
          "category": "game",
          "points": 20
        }
      }
    ]
  },
  "aggregations": {
    "maxPoints": {
      "value": 100.0
    },
    "minPoints": {
      "value": 0.0
    }
  }
}

Upvotes: 2

Related Questions