or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

advanced-features.mdcat-apis.mdclient-configuration.mdcluster-operations.mddocument-operations.mdhelper-functions.mdindex-management.mdindex.mdmachine-learning.mdsearch-operations.mdsecurity-management.md
tile.json

tessl/npm-elastic--elasticsearch

The official Elasticsearch client for Node.js providing comprehensive access to Elasticsearch clusters through a type-safe JavaScript/TypeScript API

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@elastic/elasticsearch@9.1.x

To install, run

npx @tessl/cli install tessl/npm-elastic--elasticsearch@9.1.0

index.mddocs/

Elasticsearch JavaScript Client

The official Elasticsearch Node.js client providing comprehensive access to Elasticsearch clusters through a type-safe JavaScript/TypeScript API. It supports all Elasticsearch operations including document management, search queries, cluster administration, machine learning, security, and specialized features across stack and serverless deployments.

Package Information

  • Package Name: @elastic/elasticsearch
  • Package Type: npm
  • Language: JavaScript/TypeScript
  • Installation: npm install @elastic/elasticsearch

Core Imports

import { Client } from "@elastic/elasticsearch";

For CommonJS:

const { Client } = require("@elastic/elasticsearch");

Advanced imports for custom configurations:

import { 
  Client, 
  SniffingTransport,
  errors,
  estypes,
  helpers,
  type ClientOptions,
  type NodeOptions
} from "@elastic/elasticsearch";

Transport layer imports for custom connection handling:

import {
  Client,
  SniffingTransport,
  Diagnostic,
  Transport,
  WeightedConnectionPool,
  ClusterConnectionPool,
  BaseConnectionPool,
  CloudConnectionPool,
  BaseConnection,
  HttpConnection,
  UndiciConnection,
  Serializer,
  events
} from "@elastic/elasticsearch";

All available imports (comprehensive):

// Core client and types
import { Client, SniffingTransport } from "@elastic/elasticsearch";
import type { ClientOptions, NodeOptions } from "@elastic/elasticsearch";

// All types (re-exported from @elastic/transport)
import * as estypes from "@elastic/elasticsearch";

// Helper functions
import { helpers } from "@elastic/elasticsearch";

// Transport layer components
import {
  Diagnostic,
  Transport,
  WeightedConnectionPool,
  ClusterConnectionPool,
  BaseConnectionPool,
  CloudConnectionPool,
  BaseConnection,
  HttpConnection,
  UndiciConnection,
  Serializer,
  errors,
  events
} from "@elastic/elasticsearch";

Basic Usage

import { Client } from "@elastic/elasticsearch";

// Basic client connection
const client = new Client({ 
  node: "https://localhost:9200",
  auth: {
    username: "elastic",
    password: "password"
  }
});

// Document operations
await client.index({
  index: "my-index",
  id: "1",
  document: { title: "Hello World", content: "This is a test document" }
});

const response = await client.get({
  index: "my-index",
  id: "1"
});

// Search documents
const searchResult = await client.search({
  index: "my-index",
  query: { match: { title: "Hello" } }
});

Architecture

The Elasticsearch client is built around several key components:

  • Client: Main interface extending API base class with all Elasticsearch operations
  • Transport Layer: Configurable HTTP transport with connection pooling and retry logic
  • API Categories: 60+ organized API endpoints covering all Elasticsearch functionality
  • Helpers: High-level utilities for common operations (bulk, scroll, search)
  • Type System: Complete TypeScript definitions with generic document types
  • Connection Management: Multiple connection pool strategies with automatic failover

Capabilities

Client Management

Core client configuration, connection management, and lifecycle operations for establishing and maintaining Elasticsearch cluster connections.

class Client extends API {
  constructor(opts: ClientOptions);
  child(opts: ClientOptions): Client;
  close(): Promise<void>;
  
  // Properties
  diagnostic: Diagnostic;
  name: string | symbol;
  connectionPool: BaseConnectionPool;
  transport: SniffingTransport;
  serializer: Serializer;
  helpers: Helpers;
}

interface ClientOptions {
  /** Elasticsearch node settings, if there is only one node */
  node?: string | string[] | NodeOptions | NodeOptions[];
  /** Elasticsearch node settings, if there are multiple nodes */
  nodes?: string | string[] | NodeOptions | NodeOptions[];
  /** HTTP connection class to use */
  Connection?: typeof BaseConnection;
  /** HTTP connection pool class to use */
  ConnectionPool?: typeof BaseConnectionPool;
  /** Elastic transport class to use */
  Transport?: typeof Transport;
  /** Serialization class to use */
  Serializer?: typeof Serializer;
  /** Max number of retries for each request */
  maxRetries?: number;
  /** Max request timeout in milliseconds for each request */
  requestTimeout?: number;
  /** Max number of milliseconds a ClusterConnectionPool will wait when pinging nodes */
  pingTimeout?: number;
  /** Perform a sniff operation every n milliseconds */
  sniffInterval?: number | boolean;
  /** Perform a sniff once the client is started */
  sniffOnStart?: boolean;
  /** Endpoint to ping during a sniff */
  sniffEndpoint?: string;
  /** Perform a sniff on connection fault */
  sniffOnConnectionFault?: boolean;
  /** Strategy for resurrecting dead nodes */
  resurrectStrategy?: 'ping' | 'optimistic' | 'none';
  /** Enables gzip request body compression */
  compression?: boolean;
  /** TLS configuration */
  tls?: TlsConnectionOptions;
  /** Custom HTTP agent options */
  agent?: HttpAgentOptions | UndiciAgentOptions | agentFn | false;
  /** Custom function to determine which nodes are qualified to receive a request */
  nodeFilter?: nodeFilterFn;
  /** Custom function to determine which node should receive the next request */
  nodeSelector?: nodeSelectorFn;
  /** Custom HTTP headers that should be sent with each request */
  headers?: Record<string, any>;
  /** A string prefix to apply to every generated X-Opaque-Id header */
  opaqueIdPrefix?: string;
  /** Custom function for generating unique IDs for each request */
  generateRequestId?: generateRequestIdFn;
  /** A name for this client */
  name?: string | symbol;
  /** Authentication options for this Elasticsearch cluster */
  auth?: BasicAuth | ApiKeyAuth | BearerAuth;
  /** Custom object attached to each request for passing data to client events */
  context?: Context;
  /** Proxy URL that the client will send all requests through */
  proxy?: string | URL;
  /** If true, adds x-elastic-client-meta header with client telemetry data */
  enableMetaHeader?: boolean;
  /** Custom configuration for connecting to Elastic Cloud */
  cloud?: { id: string };
  /** Disables safe JSON parsing that protects against prototype poisoning attacks */
  disablePrototypePoisoningProtection?: boolean | 'proto' | 'constructor';
  /** CA certificate fingerprint for SSL verification */
  caFingerprint?: string;
  /** Maximum uncompressed response size in bytes */
  maxResponseSize?: number;
  /** Maximum compressed response size in bytes */
  maxCompressedResponseSize?: number;
  /** Options for redacting sensitive data from Error objects */
  redaction?: RedactionOptions;
  /** Server mode setting - "stack" for traditional ES, "serverless" for Elastic Cloud Serverless */
  serverMode?: 'stack' | 'serverless';
}

Client Configuration

Document Operations

Essential CRUD operations for managing individual documents and bulk operations with versioning, routing, and refresh control.

// Single document operations
function index(params: {
  index: IndexName;
  id?: Id;
  document: TDocument;
  refresh?: Refresh;
  routing?: Routing;
}): Promise<TransportResult<IndexResponse, unknown>>;

function get(params: {
  index: IndexName;
  id: Id;
  _source?: boolean | Fields;
  routing?: Routing;
}): Promise<TransportResult<GetResponse<TDocument>, unknown>>;

function update(params: {
  index: IndexName;
  id: Id;
  doc?: Partial<TDocument>;
  script?: Script;
  refresh?: Refresh;
}): Promise<TransportResult<UpdateResponse<TDocument>, unknown>>;

function delete(params: {
  index: IndexName;
  id: Id;
  refresh?: Refresh;
  routing?: Routing;
}): Promise<TransportResult<DeleteResponse, unknown>>;

// Bulk operations
function bulk(params: {
  index?: IndexName;
  operations: BulkOperationContainer[];
  refresh?: Refresh;
}): Promise<TransportResult<BulkResponse, unknown>>;

Document Operations

Search Operations

Comprehensive search functionality including query DSL, aggregations, sorting, highlighting, and specialized search features.

function search<TDocument = unknown, TAggregations = Record<AggregateName, AggregationsAggregate>>(params: {
  index?: Indices;
  query?: QueryDslQueryContainer;
  aggs?: Record<string, AggregationsAggregationContainer>;
  sort?: SortCombinations[];
  _source?: boolean | Fields;
  from?: number;
  size?: number;
  highlight?: SearchHighlight;
  track_total_hits?: boolean | number;
}): Promise<TransportResult<SearchResponse<TDocument, TAggregations>, unknown>>;

function msearch(params: {
  searches: MsearchMultisearchBody[];
  index?: Indices;
}): Promise<TransportResult<MsearchResponse, unknown>>;

function scroll(params: {
  scroll_id: ScrollId;
  scroll?: Duration;
}): Promise<TransportResult<ScrollResponse<TDocument>, unknown>>;

Search Operations

Index Management

Complete index lifecycle management including creation, deletion, mappings, settings, aliases, and templates.

namespace indices {
  function create(params: {
    index: IndexName;
    aliases?: Record<IndexName, IndicesAlias>;
    mappings?: MappingTypeMapping;
    settings?: IndicesIndexSettings;
  }): Promise<TransportResult<IndicesCreateResponse, unknown>>;

  function putMapping(params: {
    index: Indices;
    properties?: Record<PropertyName, MappingProperty>;
    dynamic?: MappingDynamicMapping;
  }): Promise<TransportResult<IndicesputMappingResponse, unknown>>;
  
  function putSettings(params: {
    index: Indices;
    settings: IndicesIndexSettings;
  }): Promise<TransportResult<IndicesputSettingsResponse, unknown>>;
}

Index Management

Cluster Operations

Cluster-wide operations including health monitoring, statistics, settings management, and node coordination.

namespace cluster {
  function health(params?: {
    index?: Indices;
    level?: Level;
    wait_for_status?: HealthStatus;
    timeout?: Duration;
  }): Promise<TransportResult<ClusterHealthResponse, unknown>>;

  function stats(params?: {
    node_id?: NodeIds;
    flat_settings?: boolean;
    timeout?: Duration;
  }): Promise<TransportResult<ClusterStatsResponse, unknown>>;

  function putSettings(params: {
    persistent?: Record<string, any>;
    transient?: Record<string, any>;
  }): Promise<TransportResult<ClusterPutSettingsResponse, unknown>>;
}

Cluster Operations

Machine Learning

Complete ML operations including anomaly detection jobs, data frame analytics, trained model management, and datafeeds.

namespace ml {
  function putJob(params: {
    job_id: Id;
    analysis_config: MlAnalysisConfig;
    data_description: MlDataDescription;
    description?: string;
  }): Promise<TransportResult<MlPutJobResponse, unknown>>;

  function putTrainedModel(params: {
    model_id: Id;
    compressed_definition?: string;
    inference_config?: MlInferenceConfigContainer;
    input: MlTrainedModelConfigInput;
  }): Promise<TransportResult<MlPutTrainedModelResponse, unknown>>;
}

Machine Learning

Security Management

Authentication, authorization, user management, API keys, and SSL certificate operations.

namespace security {
  function putUser(params: {
    username: Username;
    password?: Password;
    roles: string[];
    full_name?: string;
    email?: string;
  }): Promise<TransportResult<SecurityPutUserResponse, unknown>>;

  function createApiKey(params: {
    name: Name;
    role_descriptors?: Record<string, SecurityRoleDescriptor>;
    expiration?: Duration;
  }): Promise<TransportResult<SecurityCreateApiKeyResponse, unknown>>;
}

Security Management

Helper Functions

High-level utilities for common patterns including simplified search, bulk operations, and scrolling.

interface Helpers {
  search<TDocument>(
    params: SearchRequest,
    options?: TransportRequestOptions
  ): Promise<Array<TDocument & { _id: Id }>>;

  scrollSearch<TDocument>(
    params: SearchRequest,
    options?: ScrollSearchOptions
  ): AsyncIterable<ScrollSearchResponse<TDocument>>;

  bulk<TDocument>(
    params: BulkHelperOptions<TDocument>,
    options?: TransportRequestOptions
  ): BulkHelper<TDocument>;

  msearch(
    params: MsearchHelperOptions,
    options?: TransportRequestOptions
  ): MsearchHelper;
}

Helper Functions

CAT APIs

Human-readable cluster information endpoints providing tabular output for monitoring and debugging.

namespace cat {
  function health(params?: {
    format?: string;
    h?: string[];
    v?: boolean;
  }): Promise<TransportResult<CatHealthRecord[], unknown>>;

  function indices(params?: {
    index?: Indices;
    format?: string;
    h?: string[];
    bytes?: Bytes;
  }): Promise<TransportResult<CatIndicesRecord[], unknown>>;

  function nodes(params?: {
    format?: string;
    h?: string[];
    full_id?: boolean;
  }): Promise<TransportResult<CatNodesRecord[], unknown>>;
}

CAT APIs

Advanced Features

Specialized Elasticsearch features including snapshots, transforms, watchers, and cross-cluster replication.

// Snapshot operations
namespace snapshot {
  function create(params: {
    repository: Name;
    snapshot: Name;
    indices?: Indices;
    wait_for_completion?: boolean;
  }): Promise<TransportResult<SnapshotCreateResponse, unknown>>;
}

// Data transformation
namespace transform {
  function putTransform(params: {
    transform_id: Id;
    source: TransformSource;
    dest: TransformDestination;
    pivot?: TransformPivot;
  }): Promise<TransportResult<TransformPutTransformResponse, unknown>>;
}

Advanced Features

Types

Core Types

type IndexName = string;
type Id = string | number;
type Routing = string;
type Refresh = boolean | 'wait_for' | 'false' | 'true';
type Duration = string; // e.g., "1m", "30s", "2h"

interface BasicAuth {
  username: string;
  password: string;
}

interface ApiKeyAuth {
  id: string;
  api_key: string;
}

interface BearerAuth {
  bearer: string;
}

Response Types

interface TransportResult<TResponse, TContext> {
  body: TResponse;
  statusCode: number;
  headers: Record<string, string | string[]>;
  warnings: string[];
  meta: {
    context: TContext;
    name: string;
    request: { params: TransportRequestParams; options: TransportRequestOptions };
    connection: Connection;
    attempts: number;
    aborted: boolean;
  };
}

interface SearchResponse<TDocument = unknown, TAggregations = Record<AggregateName, AggregationsAggregate>> {
  took: number;
  timed_out: boolean;
  _shards: ShardStatistics;
  hits: SearchHitsMetadata<TDocument>;
  aggregations?: TAggregations;
}

Error Handling

import { errors } from "@elastic/elasticsearch";

try {
  await client.get({ index: "my-index", id: "1" });
} catch (error) {
  if (error instanceof errors.ResponseError) {
    console.log("Elasticsearch error:", error.body);
  } else if (error instanceof errors.ConnectionError) {
    console.log("Connection error:", error.message);
  } else if (error instanceof errors.TimeoutError) {
    console.log("Request timeout:", error.message);
  }
}