Node.js中使用Elasticsearch

目录

一、环境准备

[1.1 启动Elasticsearch服务](#1.1 启动Elasticsearch服务)

[1.2 安装Node.js客户端](#1.2 安装Node.js客户端)

二、客户端初始化

[2.1 基础连接](#2.1 基础连接)

三、核心操作指南

[3.1 文档CRUD操作](#3.1 文档CRUD操作)

创建文档(自动生成ID)

精确检索文档

四、搜索与聚合实战

[4.1 复合条件查询](#4.1 复合条件查询)

[4.2 分页与排序](#4.2 分页与排序)

五、高级特性应用

[5.1 数据聚合分析](#5.1 数据聚合分析)

六、性能优化实践

[6.1 批量操作](#6.1 批量操作)

[6.2 客户端配置建议](#6.2 客户端配置建议)

七、错误处理策略

[7.1 结构化异常处理](#7.1 结构化异常处理)

八、完整示例应用

九、学习资源推荐


Elasticsearch作为领先的分布式搜索分析引擎,与Node.js的结合能为应用提供强大的实时搜索和数据分析能力。本文将带你完成从环境搭建到高级查询的全流程实践。

官网

一、环境准备

1.1 启动Elasticsearch服务

bash 复制代码
# 使用Docker快速启动(单节点模式)
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:8.13.0

1.2 安装Node.js客户端

bash 复制代码
npm install @elastic/elasticsearch

二、客户端初始化

2.1 基础连接

javascript 复制代码
const { Client } = require('@elastic/elasticsearch');
// 连接本地实例
const client = new Client({ node: 'http://localhost:9200' });
// 连接云服务(示例:Elastic Cloud)
const cloudClient = new Client({
  cloud: { id: '' },
  auth: { apiKey: '' }
});

三、核心操作指南

3.1 文档CRUD操作

创建文档(自动生成ID)
javascript 复制代码
async function createProduct() {
  const { _id } = await client.index({
    index: 'products',
    body: {
      name: 'Wireless Headphones',
      price: 199.99,
      category: 'electronics'
    }
  });
  return _id;
}
精确检索文档
javascript 复制代码
async function getProduct(id) {
  const { _source } = await client.get({
    index: 'products',
    id: id
  });
  return _source;
}

四、搜索与聚合实战

4.1 复合条件查询

javascript 复制代码
async function searchHighEndElectronics() {
  const { hits } = await client.search({
    index: 'products',
    body: {
      query: {
        bool: {
          must: [{ match: { category: 'electronics' }}],
          filter: [{ range: { price: { gte: 500 } }}]
        }
      }
    }
  });
  return hits.hits.map(hit => hit._source);
}

4.2 分页与排序

javascript 复制代码
async function getPaginatedResults(page = 1, pageSize = 10) {
  const from = (page - 1) * pageSize;
  
  const result = await client.search({
    index: 'products',
    from,
    size: pageSize,
    sort: [{ price: { order: 'desc' } }]
  });
  return {
    data: result.hits.hits,
    total: result.hits.total.value
  };
}

五、高级特性应用

5.1 数据聚合分析

javascript 复制代码
async function analyzePrices() {
  const { aggregations } = await client.search({
    index: 'products',
    body: {
      aggs: {
        price_stats: {
          stats: { field: 'price' }
        },
        category_distribution: {
          terms: { field: 'category.keyword' }
        }
      }
    }
  });
  return {
    averagePrice: aggregations.price_stats.avg,
    categoryDistribution: aggregations.category_distribution.buckets
  };
}

六、性能优化实践

6.1 批量操作

javascript 复制代码
async function bulkImport(products) {
  const body = products.flatMap(product => [
    { index: { _index: 'products' } },
    product
  ]);
  await client.bulk({ body });
}

6.2 客户端配置建议

javascript 复制代码
// 优化客户端配置示例
const optimizedClient = new Client({
  node: 'http://localhost:9200',
  maxRetries: 3,
  requestTimeout: 60000,
  log: 'warning' // 生产环境推荐日志级别
});

七、错误处理策略

7.1 结构化异常处理

javascript 复制代码
async function safeSearch(query) {
  try {
    return await client.search(query);
  } catch (error) {
    console.error(`[ES Error] ${error.meta.statusCode}:`, error.meta.body.error.reason);
    throw new Error('Search operation failed');
  }
}

八、完整示例应用

javascript 复制代码
const { Client } = require('@elastic/elasticsearch');
const client = new Client({ node: 'http://localhost:9200' });
async function productManager() {
  // 批量创建
  await bulkImport([
    { name: 'Smartphone', price: 799.99, category: 'electronics' },
    { name: 'Coffee Maker', price: 129.99, category: 'kitchen' }
  ]);
  // 复杂查询
  const results = await searchHighEndElectronics();
  console.log('Premium electronics:', results);
  // 聚合分析
  const analysis = await analyzePrices();
  console.log('Average price:', analysis.averagePrice);
}
productManager().catch(console.error);

九、学习资源推荐

Elasticsearch官方文档

Node.js客户端GitHub仓库

•Elastic Stack生态技术栈(Kibana、Logstash)


通过本文的实践指南,您已掌握在Node.js中操作Elasticsearch的核心技能。建议结合实际业务需求,深入探索Elasticsearch的更多高级特性,如全文搜索优化、索引生命周期管理等,以构建更强大的搜索分析系统。

相关推荐
qq_124987075322 分钟前
基于Hadoop的信贷风险评估的数据可视化分析与预测系统的设计与实现(源码+论文+部署+安装)
大数据·人工智能·hadoop·分布式·信息可视化·毕业设计·计算机毕业设计
Hello.Reader27 分钟前
Flink 使用 Amazon S3 读写、Checkpoint、插件选择与性能优化
大数据·flink
零售ERP菜鸟1 小时前
范式革命:从“信息化”到“数字化”的本质跃迁
大数据·人工智能·职场和发展·创业创新·学习方法·业界资讯
Hello.Reader1 小时前
Flink 对接 Google Cloud Storage(GCS)读写、Checkpoint、插件安装与生产配置指南
大数据·flink
浪子小院2 小时前
ModelEngine 智能体全流程开发实战:从 0 到 1 搭建多协作办公助手
大数据·人工智能
全栈前端老曹2 小时前
【MongoDB】Node.js 集成 —— Mongoose ORM、Schema 设计、Model 操作
前端·javascript·数据库·mongodb·node.js·nosql·全栈
闲人编程3 小时前
Elasticsearch搜索引擎集成指南
python·elasticsearch·搜索引擎·jenkins·索引·副本·分片
AEIC学术交流中心3 小时前
【快速EI检索 | ACM出版】2026年大数据与智能制造国际学术会议(BDIM 2026)
大数据·制造
wending-Y3 小时前
记录一次排查Flink一直重启的问题
大数据·flink
UI设计兰亭妙微3 小时前
医疗大数据平台电子病例界面设计
大数据·界面设计