带你读《Elastic Stack 实战手册》之66:——3.5.19.2.Elasticsearch语言开发(Node.js)(上)

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 带你读《Elastic Stack 实战手册》之66:——3.5.19.2.Elasticsearch语言开发(Node.js)(上)

3.5.19.2.Elasticsearch语言开发(Node.js)

创作人:姜康

审稿人:亢伟楠

 

简介

 

本节介绍如何使用 JavaScript(Node.js) 操作 Elasticsearch(简称 ES ),将从以下几个方面进行阐述:

 

l 客户端介绍

l 配置及初始化

l 常见 API 使用

l 完整示例

 

、客户端功能介绍

 

Elasticsearch 官方提供了 Node.js 的客户端 @elastic/elasticsearch,目的是为了给使用

JavaScript 代码操作 ES 提供统一、可扩展的编程接口。

官方提供的 Node.js 客户端的功能也非常完善:

 

l 与 REST API 一一对应

l 通用、可插拔的架构

l 可配置、自动发现集群节点

l 持久保持活动的连接

l 跨所有节点进行负载均衡

l child client 支持

l 开箱即用的 Typescript 支持


需要注意的是,从 ES v7 版本以后,官方提供了一些较大功能变更,因而用户在使用新版本客户端的时候,要关注如下几点:

 l 调整了 node.js 的版本支持,ES v7.11 最低支持 Node.js v8.x,ES v7.12 最低支持 Node.js v10.x

l 不再支持 browser

l 重构了代码,使用 ts 重写,加强对类型的支持

l 调整了接口调用的返回值的形式(具体讲解见下一节)

l 废弃了请求参数中的 body 参数

l type 被正式废弃

 

、代码语法介绍

 

Node.js 客户端提供了 callback API 与 promise API 两种写法:

 

l Callback 写法


client.search({
  index: 'my-index',
  body: {
    query: {
      match: { hello: 'world' }
    }
  }
}, (err, result) => {
  if (err) console.log(err)
})
// 此外需要注意的是 body 参数已经被废弃,并将在 ES V8 中被删除,因而在以后版本中,代码更推荐写为:
client.search({
  index: 'my-index',
  query: {
    match: { hello: 'world' }
  }
}, (err, result) => {
  if (err) console.log(err)
})
// Promise API 也应如此

l Promise 写法


const result = await client.search({
  index: 'my-index',
  body: {
    query: {
      match: { hello: 'world' }
        }
  }
})

在上一节中提到的调用接口返回格式的改变,参考 @elastic-transport-js 库中的代码注释(官方文档还未明确提示):

/**
  * Warning: If you set meta to true the result will no longer be
  * the response body, but an object containing the body, statusCode,
  * headers and meta keys.
  * You can use the destructuring assignment to update your code without
  * refactoring the entire code base:
  * From:
  * ```
  * const result = await client.method(params)
  * ```
   * To:
  * ```
  * const {
  *   body: result,
  *   statusCode,
  *   headers,
  *   meta
  * } = await client.method(params, { meta: true })
  * ```
  */

以 Promise API 举例,新的语法规则下的代码可以写为:

const { body, result, statusCode, headers, meta } = await client.search(
  {
    index: 'my-index',
    query: {
      match: { hello: 'world' },
    },
  },
  { meta: true }
);


此外,因为新版客户端使用了 Typescript 重写,因而也提供了更为良好的 Typescript 语法支持。

 

Typescript 类型的集成方式相较之前版本也更为简洁:

// 之前版本的类型使用
const response = await client.search<SearchResponse<Source>, SearchBody>({
  index: 'test',
  body: {query: {
      match: { foo: 'bar' }
    }
  }
})
// 新版本的类型使用
const response = await client.search<Source>({
  index: 'test',
  body: {
  query: {
      match: { foo: 'bar' }
    }
  }
})


 《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.19.Elasticsearch语言开发(Python/Nodejs/Java)——3.5.19.2.Elasticsearch语言开发(Node.js)(中) https://developer.aliyun.com/article/1226589

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
相关文章
|
14天前
|
前端开发 JavaScript 开发者
JavaScript:无处不在的Web语言
JavaScript:无处不在的Web语言
|
7月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
303 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
5月前
|
人工智能 监控 JavaScript
HarmonyOS5云服务技术分享--ArkTS开发Node环境
本文详细讲解了在HarmonyOS(ArkTS API 9及以上)中使用云函数的开发技巧,结合Node.js和HTTP触发器,从零开始手把手教学。内容涵盖核心能力、开发流程(配置到部署)、高阶优化及常见问题解决,并提供实际应用场景示例。助你快速掌握Serverless开发,提升效率,探索跨端协作与AI集成等未来方向。
|
8月前
|
JavaScript 前端开发 数据可视化
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
429 2
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
|
9月前
|
JavaScript 前端开发 jenkins
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
本文探讨了在不依赖Node和VSCode的情况下,仅使用记事本和浏览器开发一个完整的Vue3前端项目的方法。通过CDN引入Vue、Vue Router、Element-UI等库,直接编写HTML文件实现页面功能,展示了前端开发的本质是生成HTML。虽然日常开发离不开现代工具,但掌握这种基础方法有助于快速实现想法或应对特殊环境限制。文章还介绍了如何用Node简单部署HTML文件到服务器,提供了一种高效、轻量的开发思路。
174 10
|
10月前
|
Web App开发 JavaScript 前端开发
Node.js开发
Node.js开发
188 13
|
11月前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
本文将带你领略Node.js的魅力,从基础概念到实践应用,一步步深入理解并掌握Node.js在后端开发中的运用。我们将通过实例学习如何搭建一个基本的Web服务,探讨Node.js的事件驱动和非阻塞I/O模型,以及如何利用其强大的生态系统进行高效的后端开发。无论你是前端开发者还是后端新手,这篇文章都会为你打开一扇通往全栈开发的大门。
|
10月前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
本文将带领读者从零基础开始,一步步深入到Node.js后端开发的精髓。我们将通过通俗易懂的语言和实际代码示例,探索Node.js的强大功能及其在现代Web开发中的应用。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的见解和技巧,让你的后端开发技能更上一层楼。

相关产品

  • 检索分析服务 Elasticsearch版