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的更多高级特性,如全文搜索优化、索引生命周期管理等,以构建更强大的搜索分析系统。

相关推荐
IT毕设梦工厂7 分钟前
大数据毕业设计选题推荐-基于大数据的国家医用消耗选品采集数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
大数据·hadoop·信息可视化·spark·毕业设计·数据可视化·bigdata
华略创新1 小时前
利用数据分析提升管理决策水平
大数据·数据分析·crm·管理系统·软件
pingao1413781 小时前
PG-210-HI 山洪预警系统呼叫端:筑牢山区应急预警 “安全防线”
大数据·人工智能·科技
庄小焱1 小时前
大数据存储域——Kafka设计原理
大数据·kafka·消息中间件
Elastic 中国社区官方博客2 小时前
带地图的 RAG:多模态 + 地理空间 在 Elasticsearch 中
大数据·人工智能·elasticsearch·搜索引擎·ai·语言模型·全文检索
做萤石二次开发的哈哈2 小时前
萤石安全生产监管解决方案:构建企业安全智能化防护网
大数据·人工智能
万米商云2 小时前
碎片化采购是座金矿:数字化正重构电子元器件分销的价值链
大数据·人工智能·电子元器件·供应链采购
健康有益科技2 小时前
大模型食材识别技术革新:AI重构精准营养管理
大数据·人工智能·计算机视觉·重构
天翼云开发者社区4 小时前
flink on k8s的基本介绍
大数据
问道飞鱼4 小时前
【大数据相关】ClickHouse命令行与SQL语法详解
大数据·sql·clickhouse