Skip to content

Elasticsearch ​

Elasticsearch is a distributed, RESTful search and analytics engine built on Apache Lucene. It provides powerful full-text search, real-time analytics, and scalable data storage capabilities.

Bruin supports Elasticsearch as a data platform for ingestion destinations.

NOTE

Elasticsearch is only supported as a destination for ingestion using Ingestr Assets. It cannot be used for SQL-based transformations or other asset types.

Connection ​

To set up an Elasticsearch connection, you need to add a configuration item to connections in the .bruin.yml file complying with the following schema.

yaml
connections:
  elasticsearch:
    - name: "connection_name"
      username: "your-username"
      password: "your-password"
      host: "cluster.cloud.es.io"
      port: 443
      secure: "true"
      verify_certs: "true"

Parameters:

  • username: Elasticsearch username (optional for local instances without authentication)
  • password: Elasticsearch password (optional for local instances without authentication)
  • host: Elasticsearch host (e.g., localhost or cluster.cloud.es.io)
  • port: Elasticsearch port (e.g., 9200 for local, 443 for cloud)
  • secure: Whether to use HTTPS ("true" or "false", defaults to "true")
  • verify_certs: Whether to verify SSL certificates ("true" or "false", defaults to "true")

Connection Examples ​

Cloud Elasticsearch (with authentication) ​

yaml
connections:
  elasticsearch:
    - name: "elastic_cloud"
      username: "elastic"
      password: "changeme"
      host: "cluster.cloud.es.io"
      port: 443
      secure: "true"
      verify_certs: "true"

Local Elasticsearch with authentication ​

yaml
connections:
  elasticsearch:
    - name: "local_elastic"
      username: "elastic"
      password: "changeme"
      host: "localhost"
      port: 9200
      secure: "false"
      verify_certs: "false"

Local Elasticsearch without authentication ​

yaml
connections:
  elasticsearch:
    - name: "local_elastic"
      host: "localhost"
      port: 9200
      secure: "false"
      verify_certs: "false"

TIP

Cloud Elasticsearch instances typically use HTTPS (port 443) and should have secure: "true". Local instances typically use HTTP (port 9200) and should have secure: "false".

Using Elasticsearch as a Destination ​

Elasticsearch can be used as a destination for Ingestr Assets. This allows you to load data from various sources into your Elasticsearch cluster.

Example: Load Snapchat Ads transactions to Elasticsearch ​

yaml
name: snapchat_transactions
type: ingestr
description: Snapchat Ads transactions data

tags:
  - snapchat
  - ads
  - ingestion

parameters:
  destination: elasticsearch
  source_connection: my-snapchatads
  source_table: transactions

This configuration will:

  1. Extract transactions data from Snapchat Ads using the my-snapchatads connection
  2. Load the data into the snapchat_transactions index in your Elasticsearch cluster
  3. Use the default Elasticsearch connection (elasticsearch-default) from your pipeline configuration

NOTE

By default, ingestr uses a "replace" strategy which deletes the existing index before loading new data. The target index will be created automatically if it doesn't exist.

Index Naming ​

For ingestr assets, Bruin passes the asset name as ingestr's --dest-table. For Elasticsearch destinations, that destination table is the target index name. Index names in Elasticsearch:

  • Must be lowercase
  • Cannot contain spaces or special characters like \, /, *, ?, ", <, >, |, ,, #
  • Cannot start with -, _, +
  • Should follow your organization's naming conventions

Additional Resources ​