带你读《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可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
16天前
|
Web App开发 缓存 JavaScript
深入浅出Node.js后端开发
【9月更文挑战第26天】本文将引导你了解Node.js的基本原理,并通过实际案例展示如何在后端开发中应用它。我们将从Node.js的核心概念讲起,逐步深入到构建一个完整的后端服务,最后探讨如何优化你的Node.js应用。准备好让你的开发技能更上一层楼了吗?让我们一起潜入Node.js的世界!
|
2天前
|
JavaScript 前端开发 NoSQL
深入浅出Node.js后端开发
本文将引导你了解Node.js的基础知识,包括安装、运行环境搭建以及简单的代码示例。通过阅读本文,你将学会如何利用Node.js进行后端开发,并理解异步编程和事件驱动模型的核心概念。文章还将介绍一些实用的库和框架,帮助你快速开始Node.js项目。
17 4
|
5天前
|
JavaScript 前端开发 开发者
VUE 开发——Node.js学习(一)
VUE 开发——Node.js学习(一)
27 3
|
7天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【9月更文挑战第35天】本文将带你走进Node.js的世界,从基础概念到实战应用,一步步揭示Node.js在后端开发中的魅力。我们将通过实际代码示例,让你轻松掌握Node.js的开发技巧,开启你的后端开发之旅。
|
3天前
|
前端开发 JavaScript 关系型数据库
前端的全栈之路:基于 Vue3 + Nest.js 全栈开发的后台应用
这篇文章介绍了一个名为Vue3Admin的全栈后台应用,前端基于SoybeanAdmin二次开发,后端基于Nest.js。主要使用了Vue3.5、AntDesignVue、UnoCSS、Pinia等前端技术栈,以及Nest.js、PostgreSQL、Prisma等后端技术栈。文章详细描述了系统的功能设计,包括动态国际化语言配置、登录用户操作日志、用户和角色权限映射、动态路由菜单、消息公告发布及前端业务功能等。同时,也提供了项目运行所需的环境和依赖,以及如何拉取代码、安装依赖和启动项目的方法。最后,文章展示了项目的演示图,并对项目进行了总结,指出项目未经严格测试,仅供学习交流使用。
前端的全栈之路:基于 Vue3 + Nest.js 全栈开发的后台应用
|
5天前
|
XML 监控 JavaScript
JavaScript 语言对企业上网监控的技术支持
在数字化企业环境中,上网监控对企业信息安全和提升员工效率至关重要。JavaScript 作为广泛应用的脚本语言,提供了强大的技术支持,包括数据获取与分析、与服务器端交互、监控页面加载时间和网络活动,助力企业有效管理上网行为,保障信息安全。
15 6
|
7天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【9月更文挑战第35天】本文将带你走进Node.js的世界,探索这个强大的后端开发平台。我们将从基础开始,逐步深入,最后以一个简单的代码示例结束,让你对Node.js有更深入的理解。无论你是前端开发者还是后端开发者,这篇文章都将为你提供有价值的信息。让我们一起开启Node.js的学习之旅吧!
|
16天前
|
JavaScript 开发者
深入理解Node.js事件循环及其在后端开发中的应用
【8月更文挑战第57天】本文将带你走进Node.js的事件循环机制,通过浅显易懂的语言和实例代码,揭示其背后的工作原理。我们将一起探索如何高效利用事件循环进行异步编程,提升后端应用的性能和响应速度。无论你是Node.js新手还是有一定经验的开发者,这篇文章都能给你带来新的启发和思考。
|
14天前
|
Web App开发 JavaScript 前端开发
探索现代JavaScript开发:ECMAScript提案的未来
JavaScript是最受欢迎的编程语言之一,其发展迅速。ECMAScript(JS的标准化版本)的提案和更新为其带来了诸多新特性和改进。本文将介绍值得关注的ECMAScript提案,如可选链、空值合并运算符、逻辑赋值运算符、类字段和顶级Await,并展示如何利用这些新特性提升开发效率和代码质量。通过关注TC39提案流程、使用Babel和TypeScript等工具,开发者可以提前体验并利用这些新特性。随着JavaScript的不断进步,未来将有更多令人期待的功能加入。
|
JavaScript 前端开发 测试技术
测试驱动javascript开发 -- 1.单元测试
  从今天开始,我将以读书笔记的方式向大家介绍《Test-Driven JavaScript Development》相关内容。我不太清楚这本书是否已经有了中文的译本,有兴趣的朋友可以去搜索下,或者直接读英文原版。
900 0

热门文章

最新文章

相关产品

  • 检索分析服务 Elasticsearch版