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

相关推荐
面向Google编程1 小时前
Flink源码阅读:窗口
大数据·flink
老蒋新思维1 小时前
知识IP的长期主义:当AI成为跨越增长曲线的“第二曲线引擎”|创客匠人
大数据·人工智能·tcp/ip·机器学习·创始人ip·创客匠人·知识变现
乐迪信息2 小时前
乐迪信息:煤矿皮带区域安全管控:人员违规闯入智能识别
大数据·运维·人工智能·物联网·安全
悟能不能悟3 小时前
springboot全局异常
大数据·hive·spring boot
hans汉斯3 小时前
嵌入式操作系统技术发展趋势
大数据·数据库·物联网·rust·云计算·嵌入式实时数据库·汉斯出版社
产品设计大观3 小时前
6个宠物APP原型设计案例拆解:含AI问诊、商城、领养、托运
大数据·人工智能·ai·宠物·墨刀·app原型·宠物app
liliangcsdn5 小时前
LLM MoE 形式化探索
大数据·人工智能
天远云服5 小时前
Go 语言高并发实战:批量清洗天远借贷行为验证API (JRZQ8203) 的时间序列数据
大数据·api
Hello.Reader5 小时前
Flink 系统内置函数(Built-in Functions)分类、典型用法与选型建议
大数据·flink·excel
AI营销实验室6 小时前
AI 工具何高质量的为销售线索打分?
大数据·人工智能