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

简介: 带你读《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;
相关文章
|
3月前
|
前端开发 JavaScript 开发者
JavaScript:无处不在的Web语言
JavaScript:无处不在的Web语言
|
2月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
9月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
505 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
391 1
|
Web App开发 JavaScript 前端开发
Node.js开发
Node.js开发
249 13
|
存储 JavaScript 前端开发
深入浅出Node.js后端开发
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将以Node.js为例,深入探讨其背后的哲学思想、核心特性以及在实际项目中的应用,旨在为读者揭示Node.js如何优雅地处理高并发请求,并通过实践案例加深理解。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和思考。
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
在这篇文章中,我们将一起探索Node.js的奇妙世界。无论你是刚接触后端开发的新手,还是希望深化理解的老手,这篇文章都适合你。我们将从基础概念开始,逐步深入到实际应用,最后通过一个代码示例来巩固所学知识。让我们一起开启这段旅程吧!
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
本文将带你领略Node.js的魅力,从基础概念到实践应用,一步步深入理解并掌握Node.js在后端开发中的运用。我们将通过实例学习如何搭建一个基本的Web服务,探讨Node.js的事件驱动和非阻塞I/O模型,以及如何利用其强大的生态系统进行高效的后端开发。无论你是前端开发者还是后端新手,这篇文章都会为你打开一扇通往全栈开发的大门。

热门文章

最新文章

相关产品

  • 检索分析服务 Elasticsearch版