Elasticsearch Advanced Guide to Facets in Elasticsearch

By Opster Team

Updated: Jul 23, 2023

| 2 min read

Introduction 

Note that facets were superseded by aggregations in Elasticsearch 2.x.

Facets provide a way to get summary information about then data in an Elasticsearch table, for example, counts of distinct values. Facets are a key component of Elasticsearch, providing a powerful way for you to get more insight into your data. 

Understanding Facets

Facets in Elasticsearch provide aggregated data based on a search query. They allow you to explore data by returning counts of unique terms, ranges, or statistical information. Facets are essentially a form of data analysis, allowing you to understand patterns, trends, and insights in your data.

Types of Facets

There are several types of facets available in Elasticsearch, each serving a unique purpose:

  1. Term Facets: These provide counts of the unique terms in a field.
  2. Range Facets: These provide counts of the occurrences of values within a range.
  3. Histogram Facets: These provide counts of the occurrences of values within a certain interval.
  4. Statistical Facets: These provide statistical information about a specific numeric field, such as the min, max, average, and sum.
  5. Date Histogram Facets: These are similar to histogram facets but work with date values.

Implementing Facets in Elasticsearch

To implement facets in Elasticsearch, you need to use the `facet` API. Here is an example of how to use the term facet:

json
{
  "query": {
    "match_all": {}
  },
  "facets": {
    "tags": {
      "terms": {
        "field": "tag"
      }
    }
  }
}

In this example, we are getting a count of all unique tags in the data. The `match_all` query is used to select all documents, and the `terms` facet is used to get counts of unique terms in the `tag` field.

Understanding Facet Results

The results of a facet query will be included in the `facets` field of the response. Here is an example of a facet result:

json
{
  ...
  "facets": {
    "tags": {
      "_type": "terms",
      "missing": 0,
      "total": 5,
      "other": 0,
      "terms": [
        {
          "term": "tag1",
          "count": 2
        },
        {
          "term": "tag2",
          "count": 1
        }
      ]
    }
  }
}

In this result, the `terms` field contains an array of the unique terms and their counts. The `total` field shows the total number of unique terms, and the `missing` field shows the number of documents that have no value for the field.

Conclusion

Facets are a powerful tool in Elasticsearch, providing a way to get summary information about your data. By understanding and using facets, you can gain more insight into your data and make more informed decisions. Whether you’re looking for counts of unique terms, ranges, or statistical information, facets have you covered.