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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 带你读《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

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
13天前
|
开发框架 JavaScript 安全
js开发:请解释什么是Express框架,以及它在项目中的作用。
【4月更文挑战第24天】Express是Node.js的Web开发框架,简化路由管理,支持HTTP请求处理。它包含中间件系统用于日志、错误处理和静态文件服务,集成多种模板引擎如EJS、Jade、Pug。框架还提供安全中间件提升应用安全,并具有良好的可扩展性,便于项目功能扩展和开发效率提升。
25 3
|
13天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
21 3
|
13天前
|
JavaScript 前端开发
js开发:请解释什么是ES6的async/await,以及它如何解决回调地狱问题。
ES6的async/await是基于Promise的异步编程工具,简化了代码并提高可读性。它避免回调地狱,将异步操作转化为Promise,使得代码同步化。错误处理更直观,无需嵌套回调或.then()。
17 1
|
13天前
|
JavaScript 前端开发 编译器
js开发: 请解释什么是Babel,以及它在项目中的作用。
**Babel是JavaScript编译器,将ES6+代码转为旧版JS以保证兼容性。它用于前端项目,功能包括语法转换、插件扩展、灵活配置和丰富的生态系统。Babel确保新特性的使用而不牺牲浏览器支持。** ```markdown - Babel: JavaScript编译器,转化ES6+到兼容旧环境的JS - 保障新语法在不同浏览器的运行 - 支持插件,扩展编译功能 - 灵活配置,适应项目需求 - 富强的生态系统,多样化开发需求 ```
16 4
|
7天前
|
开发框架 JavaScript 前端开发
【JavaScript 与 TypeScript 技术专栏】TypeScript 在 Web 开发中的前沿应用
【4月更文挑战第30天】TypeScript在Web开发中日益重要,以其强大的类型系统提升代码质量,支持组件化开发,与React、Vue、Angular等框架良好集成。在大型项目管理中,TypeScript助于代码组织和优化,提高团队协作效率。此外,它提升开发体验,提供智能提示和错误检测。众多成功案例证明其前沿应用,未来将在Web开发领域持续发挥关键作用。
|
7天前
|
JavaScript 前端开发 IDE
【JavaScript与TypeScript技术专栏】TypeScript在JavaScript库与框架开发中的作用
【4月更文挑战第30天】TypeScript,微软开发的JavaScript超集,以其强类型和面向对象特性,正成为提升Web项目质量和效率的关键工具,尤其在库和框架开发中。它通过类型系统减少运行时错误,提供内置文档,便于重构,增强IDE支持,以及支持模块化。流行框架如React、Angular已支持TypeScript,未来有望成为开发高质量库和框架的标准语言。随着社区增长,TypeScript将在Web开发领域扮演更重要角色。
|
7天前
|
JavaScript 前端开发 IDE
【TypeScript技术专栏】TypeScript与Node.js后端开发
【4月更文挑战第30天】TypeScript在Node.js后端开发中日益重要,作为JavaScript超集,它提供静态类型检查和面向对象编程,增强代码可靠性和维护性。集成TypeScript能带来类型安全、更好的IDE体验、易于维护的代码以及增强工具支持。通过安装TypeScript编译器、编写TypeScript文件、配置TSconfig,开发者可以在Node.js项目中利用其高级特性,提高代码质量和开发效率。实践案例显示,TypeScript能确保路由处理器的类型正确,降低错误率。随着社区发展,TypeScript成为提升Node.js开发体验的推荐选择。
|
7天前
|
JavaScript 前端开发 API
如何使用JavaScript进行桌面应用开发?
【4月更文挑战第30天】如何使用JavaScript进行桌面应用开发?
15 0
|
9天前
|
运维 JavaScript Java
Serverless 应用引擎产品使用之阿里云Serverless函数计算中,在Node.js环境中执行jar文件如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
18 0
|
11天前
|
JavaScript 前端开发 关系型数据库
node+vue3+mysql前后分离开发范式——实现视频文件上传并渲染
node+vue3+mysql前后分离开发范式——实现视频文件上传并渲染
23 1

相关产品

  • 检索分析服务 Elasticsearch版