CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-elastic--elasticsearch

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

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

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);
  }
}

Install with Tessl CLI

npx tessl i tessl/npm-elastic--elasticsearch
Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@elastic/elasticsearch@9.1.x
Publish Source
CLI
Badge
tessl/npm-elastic--elasticsearch badge